Esta é uma dúvida comum e a gente costuma fazer círculos na internet e não achar nada. Encontrei nesse fórum uma boa discussão e vou deixar registrada aqui a solução proposta por E P Chandler.
Assumindo que você tem um arquivo "isub2.f" contendo a função a ser exportada:
integer function isub2(i,j)
isub2=i-j
end
compile usando o g77 do mingw.
g77 -mrtd -shared -s -o isub2.dll isub2.f
Pronto, temos uma DLL. Agora vamos chamá-la dentro do excel:
Crie um módulo no visual basic do excel (alt+f11) e defina:
Declare Function isub2 Lib "isub2.dll" Alias "isub2_" _
(x As Long, y As Long) As Long
Pronto, agora você já pode chamar a função isub2 que você fez no fortran
:)
Assinar:
Postar comentários (Atom)
9 comentários:
Muito boa dica!
Trabalho bastante com Fortran, mas não tenho muito conhecimento de VB.
Tenho uma dúvida talvez vocês possam me ajudar.
Estou tentando chamar uma subrotina do fortran (como uma dll) no excel. Não sei como proceder quando os argumentos da subrotina são do tipo array. Tentei fazer o seguinte comando:
Subrotina Fortran:
----------------------------------
Subroutine teste2(xx,yy)
Integer i
Real*8 xx, yy(3)
Do i = 1,3
yy(i) = xx + i
EndDo
Return
End
----------------------------------
Criei a dll através do seguinte comando no gfortran:
>gfotran -s -shared -mrtd -o teste2.dll teste2.f
e tentei executar a seguinte macro no excel:
-----------------------------------
Declare Sub teste2 Lib "teste2.dll" Alias "teste2_" (xx As Double, ParamArray yy())
Sub macroteste2()
Dim xx As Double
Dim yy(1 To 3) As Variant
xx = 0#
Call teste2(xx, yy)
Range("B1") = yy(1)
Range("B2") = yy(2)
End Sub
-----------------------------------
Quando executo a macro aparece a mensagem de erro: 'Subscrito fora do intervalo'.
Alguém sabe como resolvo este problema?
Obrigado
Tudo bem Felix?Estava procurando algum artigo que me ajudasse na minha dúvida sobre a linguagem Fortran.
Tenho pouco conhecimento de programação, mas pretendo construir programas matemáticos para distribuir aos meus visitantes no meu blog.
Estou estudando o Fortran, e tenho alguma noção de VB6,e Pascal. Minha dúvida é, posso usar o Fortran com o Visual Basic? Ou se não é necessário usar o Vb para interagir com o usuário?
Já fiz programas bem simples em VB, e gostaria de ter a possibilidade de criar estes e outros com o Fortran.Obrigado e abraços.
Antonio Madrid
Oi Fabricio,
Experimente da forma abaixo com ponteiros, defina no módulo:
Declare Sub teste2 Lib "teste2.dll" Alias "teste2_" (ByRef xx As Any, ByRef yy As Any)
e na função:
Call teste2(xx, yy(1))
onde yy(1) é o primeiro elemento do vetor yy(1 to 3)
Caco,
você pode sim ficar chamando uma dll fortran dentro de um programa independente em Visual Basic.
O ideal é sempre fazer isso mesmo, bem separado, a parte numérica em Fortran numa dll e a interface exe feita com sua linguagem favorita (Visual Basic, C#, C++), etc.
Desenvolver assim facilita portar, manter e reusar o código posteriormente.
Obrigado pelo auxílio, Felix. De vez em quanto vou passar por aqui p\ ver as novidades e tirar dúvidas.
Abraço.
Félix,
Obrigado pela dica.
Tenho encontrado alguns problemas. Construo a subrotina, (que roda perfeitamente no fortran), mas quando faço a dll e chamo do excel aparece a mensagem "erro em tempo de execução '53': o arquivo a seguir não foi encontrado: arquivo.dll". Estou usando o gfortran para criar a dll. Sabe o que poderia causar este problema.
Oi Fabricio,
se o windows não encontrar você pode colocar o caminho completo até a dll no
"declare" onde tem o nome do arquivo ou copiar a dll pro diretorio system32 do windows. Acho que funciona tb adicionando o diretório no PATH.
Exemplo caminho completo:
Declare Sub teste2 Lib "C:\diretorio\subdiretorios\teste2.dll" Alias "teste2_" (ByRef xx As Any, ByRef yy As Any)
abraço
Boas!Preciso com alguma urgencia de um programador de fortran para um trabalho de fim de ano.Alg que possa ou que saiba de alguem,por favor que me diga!Fico a espera de resposta!
Obrigado
ALGUÉM SABE QUE ERRO É ESSE
Configuration: Text1 - Win32 Debug--------------------
Linking...
Text9.obj : error LNK2005: _main already defined in Text1.obj
Text11.obj : error LNK2005: _main already defined in Text1.obj
Text1.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.
Text1.exe - 3 error(s), 0 warning(s)
E COMO RESOLVO
Postar um comentário