//////////////////////////////////////////////////
// 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的接口界面做得尽可能简单点(但必需要导出类),
// 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的接口界面做得尽可能简单点(但必需要导出类),
"把dll的接口界面做得尽可能简单点"意思是:dll中可能声明了多个类,但只导出一个类(而该类使用了其它的类),或者说外部使用DLL只有包含一个头文件,如ping.h
__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
把*.lib放到工程目录中。
DLL的链接没问题的,因为ping.dll还导出了一个函数,在testping.cpp里调用该函数都没问题
1,DLL要使用MFC的类吗?
2,要导出类吗?
3,要导出全局函数吗?
4,要使用C的调用方式吗?
里面没使用MFC,只要两个C++类A,CPing我的意思是说要导出CPing这个类,是否牵连到类A的声明也要在dll中公开出去!
也就是testping.cpp是否要#include "A.h"
再项目“设置”对话框的“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)
你要用到自己设计的类,当然,哪些*.h,*.cpp文件要添加入工程嘛!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
一些基本的东东:
你要用到自己设计的类,当然,哪些*.h,*.cpp文件要添加入工程嘛!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
哪要是这样的话,哪这个行吗??????????????????
"把dll的接口界面做得尽可能简单点"意思是:dll中可能声明了多个类,但只导出一个类(而该类使用了其它的类),或者说外部使用DLL只有包含一个头文件,如ping.h
偶现在没感觉了,:)
不知是你没说清楚,还是我没有理解楼主的意思。
哈哈
我倒是明白你的意思啦,总之就是你要用到自己设计的类就必需要有个.h的声明是吧哪就是说在ping.dll里一些“不导出的类”也还是要把它们的声明".h"公布出来罗,因为在导出的类的声明里用到了该类