读书人

求教C#调用C++DLL没有加extern quot;Cquot;修饰

发布时间: 2012-02-21 16:26:23 作者: rapoo

求教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;};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;}; 

读书人网 >C语言

热点推荐