急!急!MFC 扩展DLL 导出类在应用程序中该怎么用?
我用MFC 生成扩展DLL, 在该DLL中声明一个类 CMyClass,在其声明中加入AFX_EXT_CLASS,进行编译后,我想在应用程序中声明该类的对象,我是这样做的:
首先将DLL和LIB文件加到应用程序相应的位置,然后将类CMyClass 的头文件拷贝至应用程序所在的当前目录,然后在应用程序的头文件包含该文件#include "MyClass.h" ,然后声明:_delspec(dllimport)MyClass m_MyClass;
可编译该应用程序还是出错,为什么?请高手指教!
问题点数:20、回复次数:11Top
1 楼nlstone(天外流星)回复于 2003-04-02 11:09:22 得分 0
最后的声明不需要。
确认DLL工程有宏定义_AFXDLL 和 _AFXEXT
确认当前工程无宏定义_AFXDLL 和 _AFXEXT
Top
2 楼o_racle(璐璐)回复于 2003-04-02 11:15:25 得分 0
若使用动态链接DLL,则这样做是不行的。你可以在DLL中定义一个函数调用CMyClass 的对象,然后导出这个函数。
若使用静态链接DLL,则问题简单咦。Top
3 楼Johdan001(王坤)回复于 2003-04-02 11:21:24 得分 0
非常感谢各位,我是个新手,希望多多赐教!Top
4 楼Johdan001(王坤)回复于 2003-04-02 11:36:18 得分 0
回nlstone:
我按照你说的去做,可还是不能够编译成功,能否发个小例子,非常感谢!zzk@casiosoft.com.cnTop
5 楼yowen(jyw)回复于 2003-04-02 13:23:13 得分 10
class AFX_EXT_CLASS CMyClass : public CDialog
{
......
}
将DLL拷贝debug目录,LIB文件和类CMyClass 的头文件拷贝到工程目录
在应用程序的头文件加入#include "MyClass.h"
CMyClass dlg;
dlg.DoModal();
注意!不必声明:_delspec(dllimport)MyClass m_MyClass;
Top
6 楼Johdan001(王坤)回复于 2003-04-02 13:54:42 得分 0
回yowen(jyw) :我按照你说的去做可是还不行,出现如下错误:请指教我这是日文版的操作系统
testApp.obj : error LNK2001: 外部シンボル ""__declspec(dllimport) public: virtual __thiscall CMyClass::~CMyClass(void)" (__imp_??1CMyClass@@UAE@XZ)" は未解決です
testAppDlg.obj : error LNK2001: 外部シンボル ""__declspec(dllimport) public: virtual __thiscall CMyClass::~CMyClass(void)" (__imp_??1CMyClass@@UAE@XZ)" は未解決です
testAppDlg.obj : error LNK2001: 外部シンボル ""__declspec(dllimport) public: __thiscall CMyClass::CMyClass(class CWnd *)" (__imp_??0CMyClass@@QAE@PAVCWnd@@@Z)" は未解決です
testAppDlg.obj : error LNK2001: 外部シンボル ""__declspec(dllimport) public: void __thiscall CMyClass::test(void)" (__imp_?test@CMyClass@@QAEXXZ)" は未解決です
Debug/testApp.exe : fatal error LNK1120: 外部参照 3 が未解決です。
link.exe の実行エラーTop
7 楼In355Hz(好象一条狗)回复于 2003-04-02 18:47:55 得分 10
没有加入 *.lib 文件到应用程序的工程里?试试
#pragma comment(lib, "*.lib")Top
8 楼flysundy(毛毛虫)回复于 2003-04-03 09:19:56 得分 0
gzTop
9 楼Johdan001(王坤)回复于 2003-04-03 13:16:34 得分 0
非常感谢各位的回答,这个问题已经得到解决,我是在www.codeguru.com上查到的
如果哪一位需要可以跟我联系:
Top
10 楼xqybb(xqybb)回复于 2003-04-04 16:20:44 得分 0
可否将解决方法说一下,非常感谢Top
11 楼Johdan001(王坤)回复于 2003-04-07 19:59:25 得分 0
首先:在声明的类前面加上:AFX_EXE_CLASS
然后:在要用到该类的头文件中包含该这个类的头文件。
最后, 在菜单工程中的设置中要加上该dll的.lib 文件所在的路径
是不是很简单,Top




