我在vs2008下,建立一个dll项目;
想导出一个类,但是在导出类的过程中类的函数名字发生了改变,然后我通过在添加extern "C",后导出函数的名字还是还没改变。请问这个extern "C"该如何添加:我在头文件按如下方法添加会产生很多错误
#define IMAGE2005_API extern "C"__declspec(dllexport)
#else
#define IMAGE2005_API extern "C"__declspec(dllimport)
#endifclass IMAGE2005_API CImage2005  
{
private:
 void *m_pImage;public:
CImage2005(void);inline HRESULT ImageLoad( LPCTSTR pszFileName );
inline BOOL ImageIsNull();
inline BOOL Draw( HDC hDestDC, const RECT& rectDest );public:
 virtual ~CImage2005(void);};如果我把extern "C"添加在class前面,虽然没有错误,但是导出函数名字却还是不是原先定义的,依然是改变过的函数名。

解决方案 »

  1.   

    还有一个问题是:在我未添加extern "C"的时候运行成功,我使用dumpbin查看导出函数结果如下:
     ordinal hint RVA name  1 0 00001000 ??0CImage2005@@QAE@ABV0@@Z
      2 1 00001A10 ??0CImage2005@@QAE@XZ
      3 2 00001A90 ??1CImage2005@@UAE@XZ
      4 3 00001020 ??4CImage2005@@QAEAAV0@ABV0@@Z
      5 4 0000330C ??_7CImage2005@@6B@
      6 5 00001AF0 ?Draw@CImage2005@@QAEHPAUHDC__@@ABUtagRECT@@@Z
      7 6 00001AE0 ?ImageIsNull@CImage2005@@QAEHXZ
      8 7 00001AC0 ?ImageLoad@CImage2005@@QAEJPB_W@Z
    照理说我不知道怎么有8项呢,类里面的函数是5个,类本身一个,应该只是6个,那剩余的两个又是什么
      

  2.   

    在c++里用extern "C"是为了让c函数导出时,函数的符号名用c的风格,而不是c++的风格(就有一长串修饰符的那种),以方便和纯c写的程序进行连接而这里的类完全是c++的东西,加extern "C"是没有意义的c++防名字冲突,一般用namespace
      

  3.   

    谢谢楼主,我也遇到了这个问题。
    在vs2008下,我想做一个MFC的DLL,其中有一个基于CView的类,如下:
    class AFX_EXT_CLASS DFCIImageView : public CView
    却无法声明成导出类,很是郁闷!