在DLL中如何才能导出类?

srxumin 2008-11-06 07:54:33
我是第一次做MFC的DLL导出类,因为代码比较多,就不贴在这里。我把QQ留下:644960747,有意领分者请加我,用远程协助,或者直接传代码都可以,编译器是VC6。
请高手帮我解决以下3个问题,谢谢:
1、我只有2个类需要导出,但是在EXE文件里就是看不见DLL中导出的类
2、导出类的所有函数都出现以下警告:D:\Work\VC\Test\Network\Net.cpp(27) : warning C4273: 'CData::CData' : inconsistent dll linkage. dllexport assumed.不知是什么原因
3、能否在代码中直接教我AFX_EXT_CLASS这个宏是怎么用的?
...全文
198 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
编程夜猫 2008-11-06
  • 打赏
  • 举报
回复
上面的都说了
cnzdgs 2008-11-06
  • 打赏
  • 举报
回复
头文件中这样声明类:
class AFX_EXT_CLASS CData
{
// ……
};
DLL和EXE项目都包含这个头文件,EXE中还要导入DLL项目生成的LIB文件。
schlafenhamster 2008-11-06
  • 打赏
  • 举报
回复
已经收到,改好传给你
srxumin 2008-11-06
  • 打赏
  • 举报
回复
我已经照着上面的方法做了,就是无法找到,在QQ里解决一下不行吗?怕好友多我们解决问题后马上删除QQ好友,马上结帖给分。
srxumin 2008-11-06
  • 打赏
  • 举报
回复
shailen126 ,.h文件也要复制?
nostopping 2008-11-06
  • 打赏
  • 举报
回复
//DLL头文件:
#ifndef _A_B_C_H
#define _A_B_C_H

#ifdef DLLCLASS
#define DLLPORT _declspec(dllexport)
#else
#define DLLPORT _declspec(dllimport)
#endif

extern "C" class yourclassname
{
void DLLPORT ShowVersion(void);
.....
};
#endif

//DLL内容:
#define DLLCLASS
#include "stdafx.h"
#include "DLL.h"
#include <windows.h>

void yourclassname::ShowVersion()
{
MessageBox(NULL,"Version","TEST",MB_OK);
}

....
linger1216 2008-11-06
  • 打赏
  • 举报
回复

//DLL头文件
class _declspec(dllexport) yourclass //导出类
#else
class _declspec(dllimport) yourclass //导入类
#endif

//类的引用:
#include "..\DLL头文件.h"  //包含类声明头文件
#pragma comment(lib,"dll.lib");

int _tmain(int argc, _TCHAR* argv[])
{
//...
printf("hello world !\n");
return 0;
}
kingcrab 2008-11-06
  • 打赏
  • 举报
回复
楼上正解
shailen126 2008-11-06
  • 打赏
  • 举报
回复
创建MFC DLL工程,在你要导出的类前加AFX_EXT_CLASS就行了,
如 CLASS AFX_EXT_CLASS C×××:

。。。


就这么简单,类就导出了,再把生成的DLL文件。LIB文件。.h文件拷贝到EXE的工程中,在project setting ->link->object\library modules中加上lib文件,程序中加上头文件,直接用就行了。。

一、简介   AheadLib 是用来生成一个特洛伊DLL的工具,用于分析DLL的函数参数调用(比如记录Socket send了什么等等)、更改函数功能(随心所欲了:)、更改界面功能(比如在Hook里面生成一个按钮,截获事件等等)。 二、使用   1.用 AheadLib 打开要模拟的 DLL,生成一个 CPP 文件。   2.用 Visual Studio 6.0/.NET 建立一个 DLL 工程,把这个 CPP 文件加入到项目。   3.使用 Release 方式编译,生成的 DLL 将和原来的 DLL 具有一模一样的导出函数,并且能顺利把这些函数转发到原来的函数。   4.AheadLib 还可以生成 Hook 代码,用于截取当前进程的所有消息,这样就可以随心所欲地处理各种消息了 (修改第三方程序界面功能的好助手)。 三、备注   1.如果导出函数过多,在 Visual Studio 6.0 ,如果出现编译错误,请在项目属性关闭与编译头功能。   2.如果是 C++ 、C __stdcall、C __fastcall 的方式导出的话,生成的函数声明将会还原成原代码级别(可能需要修改才能编译,比如导出C++的情况)。此时使用 __declspec(dllexport) 导出 ——不能指定导出序号。   3.如果是 NONAME 或者 C _CDECL 方式导出(比如 DEF 导出,大多数Windows DLL都是这种情况,比如WS2_32等等),则使用#pragma comment(linker, "/EXPORT:...)导出,且指定导出序号。   4.如果系统没有 DbgHelp.dll,将无法识别 C++ 模式的导出

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧