保持試圖調用從C#控制檯應用程序存儲在一個Fortran DLL子程序時收到以下錯誤:「類型‘System.EntryPointNotFoundException’未處理的異常發生在名稱。 exe文件的附加信息:無法找到DLL「Fortran.dll」」幾乎所有與此相關的錯誤信息的帖子涉及到C#/ C++命名爲切入點「Fortran_Subroutine」。該項目的Fortran有一個生成後事件複製DLL轉移到C#項目(CSharp_proj \ BIN \調試)。C#/ Fortran語言:無法找到切入點
的Fortran代碼使用了兩個調用!DEC $,做他們看起來OK?:
C
MODULE MF_DLL
C
CONTAINS
C
SUBROUTINE MFNWT_INIT()
C
!DEC$ ATTRIBUTES DLLEXPORT :: MFNWT_INIT
!DEC$ ATTRIBUTES DECORATE, ALIAS: "MFNWT_INIT"
C
USE GLOBAL
...(do stuff)
RETURN
END SUBROUTINE MFNWT_INIT
的C#代碼調用FORTRAN,莫非dllimport的通話外觀OK?:
using System.Runtime.InteropServices;
public static class CustomMODSIM
{
public static Model myModel = new Model();
private static SortedList myStreamNodes;
public static void Main(string[] CmdArgs)
{
string FileName = CmdArgs[0];
myModel.Init += OnInitialize;
...(do more stuff)...
//Function call that will invoke "OnInitialize" below
myProgram.RunSolver(myModel);
}
private static void OnInitialize()
{
//call Fortran function
MFNWT_INIT();
//Initialize list of stream nodes
myStreamNodes = new SortedList();
Node m_Node = myModel.FindNode("NonStorage1");
...(do more stuff)
}
//Fortran DLL interface
[DllImport("MF_DLL.dll", CallingConvention=CallingConvention.Cdecl)]
public static extern void MFNWT_INIT();
}
*「無法在DLL'Fortran.dll'中找到名爲'Fortran_Subroutine'的入口點。」*很難相信它是這樣說的。當然它說「無法找到名爲'MFNWT_INIT'的入口點...」? – 2013-04-27 21:12:56
我一直在嘗試如此多種不同的組合,我只是在示例錯誤消息中使用了通用名稱。正如你指出的,我添加到帖子中的特定代碼的錯誤消息是「無法在DLL MF_DLL.dll中找到名爲'MFNWT_INIT'的入口點'」 – user2256085 2013-04-27 21:43:47
如果您可以發佈「dumpbin」的結果/導出MF_DLL.dll'。 – user7116 2013-04-27 21:50:48