|
大侠好,我用C#调用fortran的DLL文件,对两个项目分别编译,均显示成功。运行C#时出现以下错误,还请抽空帮忙指点,不胜感激!
托管调试助手“PInvokeStackImbalance”在“C:\Users\ZHL\Desktop\ConsoleApplication1\ConsoleApplication1\bin\Debug\ConsoleApplication1.vshost.exe”中检测到问题。
其他信息: 对 PInvoke 函数“ConsoleApplication1!ConsoleApplication1.Program::Add”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
C#代码如下:
[C#] 纯文本查看 复制代码 02 | using System.Collections.Generic; |
03 | using System.Runtime.InteropServices; |
05 | namespace ConsoleApplication1 |
09 | [DllImport( @"C:\Users\ZHL\Desktop\ConsoleApplication1\Dll1\Debug\Dll1.dll" , EntryPoint = "Add" )] |
10 | extern static int Add( int A, int B); |
11 | static void Main( string [] args) |
FORTRAN中代码如下:
[Fortran] 纯文本查看 复制代码 1 | subroutine Add ( A , B ) Bind ( C , Name = "Add" ) |
2 | !DEC$ ATTRIBUTES DLLEXPORT :: Add |
3 | use , Intrinsic :: ISO_C_Binding |
补充说明:我担心是不是fortran区分大小写导致错误,把C#和fortran程序中Add都改为ADD也出现同样的问题,如果需要,我可以把整个文件传上来。
|
|