//////////////////////////////////////////////////
// ping.dll 头文件ping.h
//////////////////////////////////////////////////
#ifdef PING_EXPORTS
#define PING_API __declspec(dllexport)
#else
#define PING_API __declspec(dllimport)
#endif
class PING_API CPing {
private:
A a;
public:
...
};
//////////////////////////////////////////////////
// 头文件A.h
//////////////////////////////////////////////////
#pragma onceclass A {
private:
...
public:
...
};
//////////////////////////////////////////////////
// 使用ping.dll的testping.cpp
//////////////////////////////////////////////////
#pragma commant(lib,"ping.lib")
#include "ping.h"int _tmain(int argc, _TCHAR* argv[]) {
CPing ping;
...
}
ping.dll编译链接都没问题,但编译testping.cpp时出错了,说找不到class A什么的,
请问要使用导出类CPing ,是否要把与CPing相关的类(如class A)的头文件都要包含到testping.cpp里呀?能不包含吗?因为我想把dll的接口界面做得尽可能简单点(但必需要导出类),

解决方案 »

  1.   

    __declspec(dllimport) ClassName; // 在你的工程里的导入类的声明
      

  2.   

    "是否要把与CPing相关的类(如class A)的头文件都要包含到testping.cpp里呀?"意思是:是否要在testping.cpp里加上#include "A.h"
    "把dll的接口界面做得尽可能简单点"意思是:dll中可能声明了多个类,但只导出一个类(而该类使用了其它的类),或者说外部使用DLL只有包含一个头文件,如ping.h
      

  3.   

    回复人: wenxy1(周末了,极速飙车) ( ) 信誉:100  2004-11-24 11:40:00  得分: 0  
    __declspec(dllimport) ClassName; // 在你的工程里的导入类的声明#include "ping.h"不是已经做到了这点了吗?????//////////////////////////////////////////////////
    // ping.dll 头文件ping.h
    //////////////////////////////////////////////////
            #ifdef PING_EXPORTS
            #define PING_API __declspec(dllexport)
            #else
            #define PING_API __declspec(dllimport)
            #endif
      

  4.   

    回复人: wenxy1(周末了,极速飙车) ( ) 信誉:100  2004-11-24 11:45:00  得分: 0  
     
     
       把*.lib放到工程目录中。
      
     
    DLL的链接没问题的,因为ping.dll还导出了一个函数,在testping.cpp里调用该函数都没问题
      

  5.   

    在VC++6.0中设计一个导出类的DLL,要注意几点:
    1,DLL要使用MFC的类吗?
    2,要导出类吗?
    3,要导出全局函数吗?
    4,要使用C的调用方式吗?
      

  6.   

    再项目“设置”对话框的“c/c++”preprocessor definitions添加PING_API宏定义
      

  7.   

    是win32DLL
    里面没使用MFC,只要两个C++类A,CPing我的意思是说要导出CPing这个类,是否牵连到类A的声明也要在dll中公开出去!
    也就是testping.cpp是否要#include "A.h"
      

  8.   

    回复人: waterpub(做一天和尚撞半天钟) ( ) 信誉:100  2004-11-24 11:56:00  得分: 0  
     
     
       再项目“设置”对话框的“c/c++”preprocessor definitions添加PING_API宏定义
      
     
    //////////////////////////////////////////////////
    // ping.dll 头文件ping.h
    //////////////////////////////////////////////////
    #ifdef PING_EXPORTS
    #define PING_API __declspec(dllexport)
    #else
    #define PING_API __declspec(dllimport)
    #endif也就是说在CPing.dll工程里 PING_API 为__declspec(dllexport)
    在testping.cpp的testping的工程里 PING_API 为 __declspec(dllimport)
      

  9.   

    一些基本的东东:
    你要用到自己设计的类,当然,哪些*.h,*.cpp文件要添加入工程嘛!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      

  10.   

    回复人: wenxy1(周末了,极速飙车) ( ) 信誉:100  2004-11-24 12:02:00  得分: 0  
     
     
       一些基本的东东:
    你要用到自己设计的类,当然,哪些*.h,*.cpp文件要添加入工程嘛!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      
     
    哪要是这样的话,哪这个行吗??????????????????
    "把dll的接口界面做得尽可能简单点"意思是:dll中可能声明了多个类,但只导出一个类(而该类使用了其它的类),或者说外部使用DLL只有包含一个头文件,如ping.h
      

  11.   

    回复人: wenxy1(周末了,极速飙车) ( ) 信誉:100  2004-11-24 12:42:00  得分: 0  
     
     
       偶现在没感觉了,:)
    不知是你没说清楚,还是我没有理解楼主的意思。
      
     
    哈哈
    我倒是明白你的意思啦,总之就是你要用到自己设计的类就必需要有个.h的声明是吧哪就是说在ping.dll里一些“不导出的类”也还是要把它们的声明".h"公布出来罗,因为在导出的类的声明里用到了该类