希望這是一個沒有腦子的簡單問題,但它表明我缺乏C++的專業知識。我是一名C#程序員,過去曾與其他人的C++/C dll一起完成了P/Invoke的大量工作。然而,這次我決定自己編寫一個包裝C++ dll(非託管),然後從C#調用我的包裝DLL。如何設置一個C++函數使其可以被p/invoke使用?
我馬上遇到的問題是我無法定義可以通過p/invoke找到的C++函數。我不知道這個語法是什麼,但這裏是我試圖至今:
extern bool __cdecl TestFunc()
{
return true;
}
本來我只是有這個,但它沒有工作,要麼:
bool TestFunc()
{
return true;
}
而且然後在C#的一面,我有:
public const string InterfaceLibrary = @"Plugins\TestDLL.dll";
[DllImport(InterfaceLibrary, CallingConvention = CallingConvention.Cdecl,
EntryPoint = "TestFunc"), SuppressUnmanagedCodeSecurity]
internal static extern bool TestFunc();
一切編譯,但是當我執行這個C#p/Invoke調用,我得到一個System.EntryPointNotFoundException:無法找到名爲「TestFunc」在DLL「的切入點插件\ TestDLL.dll」。
當然,這肯定是C++端非常簡單的東西,我只是不知道它的語法。
完美無瑕!過去我也嘗試過只有外部的「C」,但那不起作用。它直到加入_declspec(dllexport)纔會失敗。 – x4000 2009-10-07 20:26:55