首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求教C#调用C++DLL没有加extern "C"修饰的函数解决办法

2012-02-21 
求教C#调用C++DLL没有加extern C修饰的函数C++头文件如下:C/C++ codeclass IQuoteApi{public://API函数v

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

热点排行