社区
进程/线程/DLL
帖子详情
怎么调用dll中的类?
cococut
2005-02-17 02:05:42
我的dll中有类A,类B,
我怎么能够这样的调用
A a;
a.fun();
B b;
b.fun2();
...全文
1613
9
打赏
收藏
怎么调用dll中的类?
我的dll中有类A,类B, 我怎么能够这样的调用 A a; a.fun(); B b; b.fun2();
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sinall
2005-02-18
打赏
举报
回复
干脆用COM得了。
BigFanOfCpp
2005-02-17
打赏
举报
回复
还有就是,如果函数很多,就必须导出类,但是必须要变通一下,写一个导出函数,传出一个指针,指针指向你new出来的类对象就可以了,到了你的EXE或DLL里直接转换一下就可以了。
BigFanOfCpp
2005-02-17
打赏
举报
回复
如果是MFC规则DLL,不要加AFX_EXT_DATA,要用,AFX_CLASS_EXPORT,因为AFX_EXT_DATA是专门为扩展DLL准备的.
BigFanOfCpp
2005-02-17
打赏
举报
回复
简单的说:如果使用MFC的话,请在类声明前加AFX_EXT_DATA,这样在使用的时候,MFC会自动将AFX_EXT_DATA解析成__declspec(export)或__declspec(import)的,不需要你来关心。
class AFX_EXT_DATA A
{
public:
void Fun(){}
};
class AFX_EXT_DATA B
{
public:
void Fun2(){}
};
要想调用DLL中的类,一般有两种方式:
1:显示连接DLL,通过众所周知的LoadLibrary(DLL名称);加载成功后,因为这种加载方式只能导出函数,而不能导出类,所以需要一些辅助的技术,一般函数不多的话,可以在DLL里写一个导出函数,就是代理;比如:CallAFun,而CallAFun函数在DLL里再调用A的Fun函数;这个实现再高级一点就是COM模型了,因为隐藏了真正的实现,这里就不讨论了。
2:如果是隐式调用直接:
包含XXDLL.lib(Dll带的lib文件)和头文件就可以直接使用了。
3:最好的办法是使用MFC扩展DLL,它直接导出类,而不需要以上的操作。
ww51xh
2005-02-17
打赏
举报
回复
如楼上所说
master_ttch
2005-02-17
打赏
举报
回复
关于导出类
要输出整个的类,对类使用_declspec(_dllexpot);要输出类的成员函数,则对该函数使用_declspec(_dllexport)。如:
class AFX_EXT_CLASS CTextDoc : public CDocument
{
…
}
extern "C" AFX_EXT_API void WINAPI InitMYDLL();
新建两个工程,其中一个是dll工程(我的示例程序中这个工程名为DllClass),另一个是测试和使用dll的工程(名字为DllClassTest)
注意点:
1. Dll工程编译完成后,将.lib和.dll文件拷贝到测试和使用dll的工程的适当目录下(我的程序是release目录),然后将Dll工程中的导出类的头文件(以下简称头文件)拷贝到测试和使用dll的工程的适当目录下(在我的程序中是拷贝到此工程文件所在目录),然后把这个拷贝过来的头文件通过下面2和3进行修改。
2. 在Dll工程中的头文件使用的是 #define DLLCLASS_API __declspec(dllexport) 表示导出
在测试和使用dll的工程中的头文件使用的是 #define DLLCLASS_API __declspec(dllimport) 表示导入
3. 不论Dll工程的头文件如何实现(比如说包括内联函数等等),在测试和使用dll的工程中的头文件中全部都是声明而没有定义(即将类成员函数的实现部分去掉)
4。在测试和使用dll的工程的那个文件中包含对dll库的引入,分两步:
首先在是测试和使用dll的工程的setting菜单(按ALT+F7可以调出)中的LINK选项卡中的Object/Librarymodules:下填写对 dll 的连接,比如dll文件名字为DllClass.lib和DllClass.dll,则填写 ../Release/DllClass.lib(注意目录,我的程序中.lib文件是在目录release下)。
然后,添加对头文件的包含,比如dll文件名字为DllClass.lib和DllClass.dll,头文件为DllClass.h,则包含头文件为 #include "DllClass.h"
由此,就可以使用了。
相关源码如下:
dll工程中的DllClass.h 内容:
//此处在dll的头文件中为 dllexport,在应用文件中为dllimport
#defineDLLCLASS_API__declspec(dllexport)
//导出一个类(包括其方法、属性)
classDLLCLASS_APICDllClass
{
public:
CDllClass(void);
voidMSG(constchar*conststr);
};
dll工程中的DllClass.cpp内容:
#include"stdafx.h"
#include"DllClass.h"
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
CDllClass::CDllClass()
{
return;
}
void CDllClass::MSG(const char* const str)
{
MessageBox(NULL,str,"",MB_OK);
}
Dll测试工程中的DllClass.h内容:
//此处在dll的头文件中为 dllexport,在应用文件中为dllimport
#define DLLCLASS_API __declspec(dllimport)
//导出一个类(包括其方法、属性)
class DLLCLASS_API CDllClass
{
public:
CDllClass(void);
void MSG(const char* const str);
};
Dll测试工程中DllClassTest.cpp内容:
首部:
#include "DllClass.h"
class DllClass;
代码部分:
CDllClass CTest;
CTest.MSG("this is a string into dll");
legendhui
2005-02-17
打赏
举报
回复
xx
kingzai
2005-02-17
打赏
举报
回复
http://codeguru.earthweb.com/Cpp/W-P/dll/article.php/c3637/
SatanLi1982
2005-02-17
打赏
举报
回复
不知到楼主指的是那一种,如果是隐式调用直接:
包含XXDLL.lib(Dll带的lib文件)和头文件就可以了
如果是显示调用比较麻烦,你搜搜,以前的帖子有讨论的。
如何
调用
DLL
中
的
类
本文介绍了一个使用_declspec(
dll
export)从
DLL
中
调用
类
的简单示例。该示例展示了如何定义和使用导出
类
,包括设置成员变量并获取它们的总和。
Unity动态加载
dll
,并
调用
dll
中
的某个
类
的方法
本文介绍如何在Unity环境
中
使用C#代码动态加载
DLL
,并从该
DLL
中
调用
特定
类
的方法。通过Assembly.LoadFrom和GetType方法,可以定位到
DLL
中
的指定
类
型,再利用GetMethod来获取方法信息,最后通过Invoke执行方法并获取返回结果。
vs2013/QT5
调用
C++编写的
DLL
类
中
的方法
在VS2013
中
创建C++
DLL
工程,导出
类
及方法,然后在QT工程
中
静态
调用
DLL
。问题在于QT工程无法访问
DLL
类
中
的方法,通过删除
类
名前的API标识并为导出方法添加API标识后解决问题。确保
DLL
与引用项目的框架一致,避免兼容性错误。
MFC如何
调用
DLL
中
的
类
本文详细介绍了使用MFC创建静态
DLL
的过程,包括生成
DLL
文件、添加
类
、导出
类
及成员函数,并展示了如何在主程序
中
调用
这些导出的函数。
c++
调用
dll
函数,导出
类
中
的成员函数
本文详细介绍了如何使用
DLL
,并探讨了显示与隐式链接的不同方法。提供了具体的代码示例来展示如何导入和导出
类
及函数,以及如何通过动态加载来
调用
DLL
中
的函数。
进程/线程/DLL
15,465
社区成员
49,169
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章