求教C#调用C++DLL没有加extern "C"修饰的函数解决办法
求教C#调用C++DLL没有加extern "C"修饰的函数
C++头文件如下:
C#代码如下:
运行报错:
无法在 DLL“Api.Dll”中找到名为“Close”的入口点。
使用反编译工具PE Explorer查看入口点没有仅仅存在CertApi,未找到Open、Close、IsOpen,
由此是否可以得到结论未声明extern "C"的C++将不会生成函数入口?
请问使用C#调用C++DLL是不是非得声明extern "C"才能被C#调用到?若未申明怎样才能调用到?
------解决方案--------------------
C++头文件如下:
- C/C++ code
class IQuoteApi { public: //API函数 virtual bool __cdecl Open(TAddressField& addr) = 0; virtual void __cdecl Close() = 0; virtual bool __cdecl IsOpen() = 0; }; extern "C" { //认证函数 认证码 针对每个开发商 一个 bool __cdecl CertApi(TCertInfoType cert, TLogPathType path); }
C#代码如下:
- C# code
[DllImport("Api.Dll", CallingConvention = CallingConvention.Cdecl)] public static extern bool CertApi(string cert,string path); [DllImport("Api.Dll", CallingConvention = CallingConvention.Cdecl)] public static extern int Close(); bool certInfo; certInfo = CertApi("sdfsasfwer", "asdfdf"); int c; c = Close();
运行报错:
无法在 DLL“Api.Dll”中找到名为“Close”的入口点。
使用反编译工具PE Explorer查看入口点没有仅仅存在CertApi,未找到Open、Close、IsOpen,
由此是否可以得到结论未声明extern "C"的C++将不会生成函数入口?
请问使用C#调用C++DLL是不是非得声明extern "C"才能被C#调用到?若未申明怎样才能调用到?
------解决方案--------------------
- C/C++ code
class IQuoteApi { public: //API函数 virtual bool __cdecl Open(TAddressField& addr) = 0; virtual void __cdecl Close() = 0; virtual bool __cdecl IsOpen() = 0; };