社区
进程/线程/DLL
帖子详情
【求助】请问在VC里,如何导出DLL里的类及其函数?调用程序应该如何写?多谢
c00der
2007-07-11 03:31:19
在DLL里,除了在头文件里把要导出的类声明成:
class _declspec(dllexport) myClass
{
//成员函数
}
外,还需要如何写?
多谢
...全文
304
13
打赏
收藏
【求助】请问在VC里,如何导出DLL里的类及其函数?调用程序应该如何写?多谢
在DLL里,除了在头文件里把要导出的类声明成: class _declspec(dllexport) myClass { //成员函数 } 外,还需要如何写? 多谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
spob110
2007-07-13
打赏
举报
回复
你用DEBUG调试就会有LIB文件了
johnxt
2007-07-12
打赏
举报
回复
MS的VC++技术内幕,你总得看吧?
c00der
2007-07-12
打赏
举报
回复
>>OK,建议你还是先去找本书看看,这样你提高的效率会高一些。
能推荐几本吗?thx
johnxt
2007-07-12
打赏
举报
回复
OK,建议你还是先去找本书看看,这样你提高的效率会高一些。
c00der
2007-07-12
打赏
举报
回复
thx,不过我是想动态调用,还需要 lib吗?
我编译后,好像也没生成.lib?
johnxt
2007-07-12
打赏
举报
回复
这样写头文件:
//CMyClass.h
#ifndef _CMY_CLASS_H_
#define _CMY_CLASS_H_
#ifdef _MY_DLL_EXPORT_
#define _DLL_EXPORT_ __declspec(dllexport)
#else
#define _DLL_EXPORT_ __declspec(dllimport)
#endif
class _DLL_EXPORT CMyClass
{
...
};
#ifndef _MY_DLL_EXPORT_LIB_
#pragma comment(lib,"MyDLL.lib")
#endif
#endif
将_MY_DLL_EXPORT_和_MY_DLL_EXPORT_LIB_加到dll 工程的预编译定义中。
这几个宏只是自己定义的名字,你可以随便改成自己要定义的名字即可。
对于调用者来讲,需要包含CMyClass.h文件,当然要指定头文件,lib文件的路径才能编译通过。
珍惜生命远离CPP
2007-07-12
打赏
举报
回复
class _declspec(dllexport) myClass
{
//成员函数
}
就这样写啊。编译成dll后会有一个lib文件和dll文件
包含头文件的时候改成
class _declspec(dllimport) myClass
然后倒入lib库就可以了。
c00der
2007-07-12
打赏
举报
回复
写了一个只有一个函数的dll,测试用,调用也成功了。。。但是这个写成类的就不知道咋整了。。。
c00der
2007-07-12
打赏
举报
回复
头文件我已经添加了。。。关键是不知道如何写啊。。。
不知道如何导出,如何调用。。。。:(
coldplay968
2007-07-12
打赏
举报
回复
DLL里的类 ,还要将导出类的头文件添加到工程中,否则无法编译。
如果导出类可以可以完成一个独立的功能而且调用调用者不需要频繁的调用
dll到处的类的话,就可以引出一个两个函数就可以了。
其实导出类只是代码级的分装,可以减少编译的时间
c00der
2007-07-12
打赏
举报
回复
#ifdef MY_DLL_EXPORT
#define _DLL_EXPORT_ __declspec(dllexport)
#else
#define _DLL_EXPORT_ __declspec(dllimport)
#endif
请问,这一段是加在调用程序里吗?
MY_DLL_EXPORT 需要替换成什么?
多谢
c00der
2007-07-12
打赏
举报
回复
我也知道很多书需要看和学习,并且也在进行其中一部分,
可是工作中急需东西的就需要快速突破了。。。呵呵
johnxt
2007-07-11
打赏
举报
回复
要使用正确的导出类的修饰,对于dll本身来讲,修饰应该是__declspec(dllexport),而对于调用者来讲,应该是__declspec(dllimport)。而为了正确的编译修饰,可以声明如下:
#ifdef MY_DLL_EXPORT
#define _DLL_EXPORT_ __declspec(dllexport)
#else
#define _DLL_EXPORT_ __declspec(dllimport)
#endif
将MY_DLL_EXPORT加到dll 工程的预编译定义中。
现在你可以使用_DLL_EXPORT_宏来修饰你任何想导出的类或函数了。
VC
++编
写
DLL
导出
函数
及其
调用
方法
DLL
(Dynamic Link Library)动态链接库,是一个包含可由多个
程序
同时使用的代码和数据的库,
DLL
不是可执行文件,其优点主要有:1. 有助于节省内存;2. 有助于资源共享;3. 不需编译的软件系统升级;4. 支持多语言
程序
。当然,有的时候我们也可以将一些核心的或者不愿意公开提供的
函数
编
写
为
DLL
,从而起到隐藏和保护的作用。 下面结合实例详细说明在Visual Studio
VC
++
DLL
导出
函数
经常使用
VC
6的Dependency查看
DLL
导出
函数
的名字,会发现有
DLL
导出
函数
的名字有时大不相同,导致不同的原因大多是和编译
DLL
时候指定
DLL
导出
函数
的界定符有关系。
VC
++支持两种语言:即C/C++,这也是造成
DLL
导出
函数
差异的根源 我们用VS2008新建个
DLL
工程,工程名为“Test
DLL
” 把默认的源文件后缀 .CPP改为.C(C文件) 输入测试代码如下:
VC
中
调用
dll
函数
的两种方法
一、显式
调用
1、定义
函数
指针 typedef int (*
dll
_mul)(int a,int b); 2、加载
dll
,并获取其
程序
实例句柄 HINSTANCE h
dll
=loadlibrary("c:/cpp
Dll
.
dll
"); 3、从
dll
实例句柄中获取
函数
指针
dll
_mul mymul=(
dll
_mul)GetProcAddress(h
dll
,"mul"); 4、使用获取
vc
中
dll
导出
导入简单教程
dll
和lib的区别未完待续如何
导出
dll
查阅msdn官方文档发现,
导出
dll
有三种方式,一种是使用.def文件
导出
,另一种是在代码中使用宏__declspec(
dll
export)
导出
,最后一种是配置
vc
工程的属性,使用LINK 命令中的 /EXPORT 规范一,使用.def文件
导出
模块定义 (.def) 文件是包含一个或多个描述
DLL
各种特性的 Module 语句的文本文件。.def 文件必
DLL
导出
函数
和
类
1 基本概念 1.1 动态链接库 库是
写
好的现有的,并且可以复用的代码。现实开发中每个
程序
都要依赖很多基础的底层库,不可能每个功能都从零开始开发,因此库是必须存在的。库的本质是一种可执行的二进制文件,可以被操作系统加载到内存中执行,库有两种:静态链接库(简称为静态库)和动态链接库(简称为动态库),所谓静态、动态是指链接,一个
程序
编译成可执行文件步骤如下图所示: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FgwmgSGt-1646739553600)(img\编译过程.PN
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章