En tant qu'avant, je suis un débutant complet en ce qui concerne Fortran. J'ai passé un certain temps à regarder les autres questions sur SO, mais je ne pouvais pas identifier une question similaire à celle-ci, alors s'il vous plaît pardonnez-moi si ma solution est soit évidente, ou déjà répondu :)Valeur impaire retournée par une simple fonction Fortran
Je suis tenter d'apprendre à implémenter correctement une DLL Fortran auto-écrite dans une application VB.net. J'ai pu faire reconnaître la DLL par VB et exécuter la fonction sans aucune erreur. L'erreur provient plutôt de la sortie attendue par rapport à la sortie réelle.
fonction Ma Fortran DLL se lit comme suit:
function ex(i)
integer*4 i
ex=i+1
return
end
Une fonction très simple qui incrémente le paramètre passé par un et renvoie la valeur. (Je pense). L'application VB a le code suivant.
<DllImport("ex.dll")> _
Public Shared Function ex(ByRef val As Integer) As Integer
End Function
Private Sub btn_Fortran_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Fortran.Click
Console.WriteLine(ex(1))
End Sub
Alors, je passe la fonction ex la valeur entière 1. Je me attends à la valeur 2 à écrire sur la console. Au lieu de cela, j'obtiens la valeur "1073741824" Pas exactement égal. Des idées où je suis évidemment en train d'échouer?
Je devine juste, donc ceci est un commentaire. Il semble, cependant, que le passage de la constante 1 pourrait ne pas être correct puisque le paramètre de l'importation est défini comme ByRef. En fait, il me semble que ça n'aurait pas dû être construit. Essayez de déclarer un entier et de le passer à 'ex'. Au-delà de cela, j'essaierais d'affiner si c'est un problème de param ou la valeur de retour elle-même. Changez votre fonction 'ex' pour simplement retourner une constante; cela pourrait aider à identifier si le param passé est faux ou si la valeur de retour ne récupère pas correctement. –