我已經在dev C++中編寫了一個DLL。該DLL的名稱是「DllMain.dll」,它包含兩個函數:HelloWorld
和ShowMe
。頭文件看起來是這樣的:如何在C中調用C++ DLL#
DLLIMPORT void HelloWorld();
DLLIMPORT void ShowMe();
和源文件看起來像這樣:
DLLIMPORT void HelloWorld()
{
MessageBox (0, "Hello World from DLL!\n", "Hi",MB_ICONINFORMATION);
}
DLLIMPORT void ShowMe()
{
MessageBox (0, "How are u?", "Hi", MB_ICONINFORMATION);
}
我編譯的代碼放到一個DLL,並調用從C#這兩種功能。 C#代碼如下所示:
[DllImport("DllMain.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void HelloWorld();
[DllImport("DllMain.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void ShowMe();
當我打電話功能的「HelloWorld」,它運行良好,彈出一個消息框,但是當我調用該函數ShowMe
的EntryPointNotFoundException
發生。我如何避免這種異常?我需要在頭文件中添加extern "C"
嗎?
請問您可以發佈您的C++代碼嗎? – 2013-05-02 09:20:22
您應該將調用約定更改爲「CallingConvention.StdCall」。 – Henrik 2013-05-02 10:57:11