我正在使用DUMPBIN实用程序从c++ dll中获取损坏的名称,以便在c#应用程序中使用。我正在使用c++ (Dllexport)公开一个__declspec类成员函数,输出损坏的名称结果是
?InitPort@CProtocolStack@@QAEEHEPAEKE@Z = ?InitPort@CProtocolStack@@QAEEHEPAEKE@Z (public: unsigned char __thiscall CProtocolStack::InitPort(int,unsigned char,unsigned char *,unsigned long,unsigned char))在导入相同的函数时,是否需要在C#应用程序中使用全名?如果没有,哪一部分足够进口?
发布于 2013-12-24 10:38:36
你只需要一点:
?InitPort@CProtocolStack@@QAEEHEPAEKE@Z然后你宣布如下:
[DllImport("your.dll",
EntryPoint = "?InitPort@CProtocolStack@@QAEEHEPAEKE@Z",
ExactSpelling = true)]
static extern byte CProtocolStack::InitPort( /* etc. */);发布于 2013-12-24 11:47:57
如果您没有使用托管C++ (可以直接从C#调用),请在接口extern "C"中声明函数,然后直接使用函数名。损坏可以从编译器的一个版本更改到下一个版本;extern "C"名称不会更改。
发布于 2020-11-18 02:32:02
如果您的函数不需要重载,您可以使用extern "C"来确定函数的名称。
https://stackoverflow.com/questions/20759324
复制相似问题