Fortran代码
FUNCTION ComputeSquareRoot(inputValue)
IMPLICIT NONE
!DEC$ ATTRIBUTES ALIAS:'ComputeSquareRoot' :: ComputeSquareRoot
!DEC$ ATTRIBUTES DLLEXPORT :: ComputeSquareRoot
REAL*8 :: inputValue
REAL*8 :: ComputeSquareRoot
ComputeSquareRoot = SQRT(inputValue)
RETURN
END FUNCTION
C#代码
[DllImport("TestingFortranDll.dll", CallingConvention = CallingConvention.Cdecl)]
static extern double ComputeSquareRoot(ref double inputValue);
/// <summary>
/// Wrapper method for ComputeSquareRoot.
/// </summary>
/// <returns></returns>
public static double CallingComputeSquareRoot()
{
var inputValue = 100.0;
return ComputeSquareRoot(ref inputValue);
}
异常
应用程序中的组件发生了未处理的异常....
无法加载DLL“TestingFortranDll.dll”:找不到特定模块。 (HRESULT异常:0x8007007E)
仅当我尝试使用SQRT等隐含函数时才会发生此异常。
答案 0 :(得分:1)
这似乎是dll缺少一些依赖项。使用Dependency Walker查找缺少哪些dll
有一些关于查找Fortran可再发行文件的信息here。您将需要为他们提供您的DLL。对于测试,只需将它们复制到同一目录,看看它是否有帮助。