在dll定义了一个导出类
EXPORT class testclass
{
public:
testclass();
virtual ~testclass();
public:
int addtest(int x,int y);
};
请问在exe中应该如何调用?
假如高手有实例,可以给我一个实例吗?

解决方案 »

  1.   


    定义一份头文件同时给DLL、EXE使用#if !defined HCLASS_H
    #define HCLASS_Hclass MY_EXT_CLASS CHClass
    {
    public:
    CHClass();
    virtual ~CHClass();

    void PopMessageBox(CString strOutput);
    };#endif
    在DLL中定义:MY_EXT_CLASS AFX_CLASS_EXPORT
    在EXE中定义:MY_EXT_CLASS AFX_CLASS_IMPORT
      

  2.   

    http://www.codeproject.com/dll/dllexport.asp
      

  3.   

    he_sl(he_sl) 你的意思是说一定要在exe和dll中同时定义类?
      

  4.   

    我理解是这样 否则你的exe工程怎么知道CHClass 不知道是否可以不用同一个.h文件 没试过
      

  5.   

    在DLL中定义类,作为头文件,并在dll中定义其成员函数体;
    在EXE文件中包含该类的头文件,声明该类对象,就可以使用了。
      

  6.   

    这样的话,假如要修改那个头文件的话,dll和exe都要重新编辑?
      

  7.   

    一定要两边都定义
    比如定义一个共用的头文件
    #ifndef CIRCLE_H
    #define CIRCLE_H
    #ifdef DLL_FILE
    class _declspec(dllexport) circle  //导出类circle
    #else
    class _declspec(dllimport) circle  //导入类circle
    #endif
    {
    public:
    void SetCentre(const point &centrePoint);
    void SetRadius(float r);
    float GetGirth();
    float GetArea();
    circle();
    private:
    float radius;
    point centre;
    };#endif
      

  8.   

    修改头文件并编译dll的话,exe不一定需要重新编辑。下面是我的测试结果:
    测试Dll服务端(dll)的修改是否会影响客户端(exe)1、加注释——不影响客户端,客户端不需要重编译2、加函数——不影响客户端,客户端不需要重编译3、修改被调用函数的实现——不影响客户端,客户端不需要重编译4、修改被调用函数的定义,加入默认参数——影响客户端。客户端需要重编译!5、修改被调用函数的定义,加入非默认参数——影响客户端。客户端需要重编译!
      

  9.   

    #ifdef DLL_FILE
    class _declspec(dllexport) circle  //导出类circle
    #else
    class _declspec(dllimport) circle  //导入类circle
    #endif加入这个以后,就可以共用一个h文件了,dll中定义了DLL_FILE宏,所以为export,exe中未定义DLL_FILE,所以为import
    ......