如何在C ++ DLL中调用C#简单函数

时间:2014-01-16 11:35:02

标签: c# c++ dllimport

我在c ++中有一个简单的函数(不是类的方法)

__declspec(dllexport) extern "C" void __stdcall TestFunc();  

我尝试从c#中调用它:

[DllImport("ImportTest.dll")]  
public static extern void TestFunc();  

...  

TestFunc();

它抛出了“无法找到入口点”的例外情况。

什么错了?

感谢您帮助我:)

2 个答案:

答案 0 :(得分:5)

尝试(猜测,该DLL是用VS编写的)

extern "C" __declspec(dllexport) void __stdcall TestFunc();

这是:

  • __declspec(dllexport)通知编译器,该函数将从DLL导出;
  • extern "C"主要是为了防止function name decorations;
  • __stdcall,因为如果你在[DllImport]指令中指定为none,这是默认的调用约定。

将来,您可以使用Dll export viewer检查您的功能是否从DLL导出。

答案 1 :(得分:1)

在C ++函数中,在标题处(如果你的函数在标题中声明)添加

extern "C" _declspec(dllexport) void TestFunc();

在函数定义中使用

_declspec(dllexport) void TestFunc()
{

}

在C#侧,你需要声明一个像

这样的函数
[DllImport(@"ImportTest.dll",
                 EntryPoint = "TestFunc",
                 ExactSpelling = false,
                 CallingConvention = CallingConvention.Cdecl)]
            static extern void NewTestFunc()

现在使用NewTestFunc()