社区
进程/线程/DLL
帖子详情
怎么将动态库需要读取的文件封到动态库中去
starytx
2011-05-19 11:15:18
MFC扩展动态库,需要用到几个文件(用记事本打开,可以看到明文的),也就是读取一遍里边的内容,现在想把这几个文件封装到DLL中,否则使用这个DLL时还得附带那几个文件,不知道怎么做?
...全文
141
19
打赏
收藏
怎么将动态库需要读取的文件封到动态库中去
MFC扩展动态库,需要用到几个文件(用记事本打开,可以看到明文的),也就是读取一遍里边的内容,现在想把这几个文件封装到DLL中,否则使用这个DLL时还得附带那几个文件,不知道怎么做?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
starytx
2011-05-20
打赏
举报
回复
我刚才DllMain传了一个类中的函数名,发现编译老是不通过,换成一个全局函数名,OK了。结果页正确,多谢耐心的答复,加分是必须的。[Quote=引用 18 楼 lactoferrin 的回复:]
你可以在任何时候使用这个来得到模块句柄
MEMORY_BASIC_INFORMATION mbi;
VirtualQuery(DllMain,&mbi,sizeof mbi);
mbi.AllocationBase就是模块句柄
这里的DllMain可以换成dll中任意一个函数地址或者全局变量的地址
[/Quote]
cngst
2011-05-19
打赏
举报
回复
加到RES(资源文件中)
starytx
2011-05-19
打赏
举报
回复
我加载到资源后添加的资源类型是“LIB”,以前打开文件是fopen("文件名","");现在怎么用呢?
King_hhuang
2011-05-19
打赏
举报
回复
把文件加到资源中啊
就像你程序中用到的图片资源一样
碧螺春的马甲
2011-05-19
打赏
举报
回复
在 res 段里面添加 binary 资源。
CodeProject-Jerry
2011-05-19
打赏
举报
回复
把这几个文件嵌入到dll的资源里面
在运行时使用API读取
Lactoferrin
2011-05-19
打赏
举报
回复
你可以在任何时候使用这个来得到模块句柄
MEMORY_BASIC_INFORMATION mbi;
VirtualQuery(DllMain,&mbi,sizeof mbi);
mbi.AllocationBase就是模块句柄
这里的DllMain可以换成dll中任意一个函数地址或者全局变量的地址
Lactoferrin
2011-05-19
打赏
举报
回复
[Quote=引用 15 楼 starytx 的回复:]
好像==1时只执行一次,但现在我是在一个类的构造中FindResource的,而这个类的对象是一个全局变量,时间比这儿早,怎么办呢引用 14 楼 lactoferrin 的回复:
DllMain会被多次执行
但fdwReason==1时只会有一次,而且是dll被加载时首先执行的
[/Quote]
你的DllMain是crt调用的,并不是真正的入口点,因此不是最先被调用
你可以规定DllMain为入口点,但这样全局对象就不会自动调用构造函数
buyong
2011-05-19
打赏
举报
回复
我记得好像用dll中的资源,应该先AfxSetResourceHandle
用完在设置为exe的handle
AfxSetResourceHandle
void AfxSetResourceHandle( HINSTANCE hInstResource );
Parameters
hInstResource
The instance or module handle to an .EXE or DLL file from which the application’s resources are loaded.
Remarks
Use this function to set the HINSTANCE handle that determines where the default resources of the application are loaded.
[Quote=引用 8 楼 starytx 的回复:]
嗯,我在一个exe中进行了测试,已经弄好了,但在DLL中同样的方法为什么FindResource返回NULL了
引用 7 楼 lactoferrin 的回复:
加载到了资源后用FindResource+LoadResource即可得到数据的地址
LockResource是为了兼容老程序而保留的,可不使用
[/Quote]
starytx
2011-05-19
打赏
举报
回复
好像==1时只执行一次,但现在我是在一个类的构造中FindResource的,而这个类的对象是一个全局变量,时间比这儿早,怎么办呢[Quote=引用 14 楼 lactoferrin 的回复:]
DllMain会被多次执行
但fdwReason==1时只会有一次,而且是dll被加载时首先执行的
[/Quote]
Lactoferrin
2011-05-19
打赏
举报
回复
DllMain会被多次执行
但fdwReason==1时只会有一次,而且是dll被加载时首先执行的
starytx
2011-05-19
打赏
举报
回复
我定义了一个全局的HMODULE这样试过了,我发现这儿这个赋值没有我FindResource那儿运行的早,而且这儿运行了9次[Quote=引用 12 楼 lactoferrin 的回复:]
static HMODULE BaseAddress;
BOOL WINAPI DllMain(
HINSTANCE hinstDLL,
DWORD fdwReason,
LPVOID lpvReserved
)
{
if(fdwReason==1)BaseAddress=hinstDLL;
return 1;
}
后面用的时候模块句柄就传BaseAddre……
[/Quote]
Lactoferrin
2011-05-19
打赏
举报
回复
static HMODULE BaseAddress;
BOOL WINAPI DllMain(
HINSTANCE hinstDLL,
DWORD fdwReason,
LPVOID lpvReserved
)
{
if(fdwReason==1)BaseAddress=hinstDLL;
return 1;
}
后面用的时候模块句柄就传BaseAddress
starytx
2011-05-19
打赏
举报
回复
动态库中导入的文件,那FindResource的第一个参数是不是不能填NULL了?那应该填什么[Quote=引用 9 楼 cngst 的回复:]
引用 8 楼 starytx 的回复:
嗯,我在一个exe中进行了测试,已经弄好了,但在DLL中同样的方法为什么FindResource返回NULL了引用 7 楼 lactoferrin 的回复:
加载到了资源后用FindResource+LoadResource即可得到数据的地址
LockResource是为了兼容老程序而保留的,可不使用
检查一下是不是模块句柄弄错了
[/Quote]
Lactoferrin
2011-05-19
打赏
举报
回复
dll中模块句柄不能传0,要传DllMain中得到的模块句柄
cngst
2011-05-19
打赏
举报
回复
[Quote=引用 8 楼 starytx 的回复:]
嗯,我在一个exe中进行了测试,已经弄好了,但在DLL中同样的方法为什么FindResource返回NULL了引用 7 楼 lactoferrin 的回复:
加载到了资源后用FindResource+LoadResource即可得到数据的地址
LockResource是为了兼容老程序而保留的,可不使用
[/Quote]
检查一下是不是模块句柄弄错了
starytx
2011-05-19
打赏
举报
回复
嗯,我在一个exe中进行了测试,已经弄好了,但在DLL中同样的方法为什么FindResource返回NULL了[Quote=引用 7 楼 lactoferrin 的回复:]
加载到了资源后用FindResource+LoadResource即可得到数据的地址
LockResource是为了兼容老程序而保留的,可不使用
[/Quote]
Lactoferrin
2011-05-19
打赏
举报
回复
加载到了资源后用FindResource+LoadResource即可得到数据的地址
LockResource是为了兼容老程序而保留的,可不使用
HonYon
2011-05-19
打赏
举报
回复
既然不需要动态加载,为什么不把文件内容直接写死在代码里呢,呵呵
java
动态库
_java调用dll
动态库
文件
的一般总结
首先
需要
明白的是,在java中是不能直接调用
动态库
文件
的,因为
动态库
文件
是使用c或是c++编写的,作为一种跨 平台的编程语言,java提供了一些用来
读取
dll
文件
方法,一种是直接用JNI,这种方法一般来说用的人比较少,...
动态库
和静态库
一.什么是库,库有什么用 库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要...这类函数库最大的优点就是编译成功的可执行
文件
可以独立运行,而不再
需要
向外部要求
读取
函数库的内容。 静态库的缺点:
linux
动态库
(.so)搜索路径(目录)设置方法
在Linux 中,
动态库
的搜索路径除了默认的搜索路径外,还可通过三种方法来指定: ...当程序执行时
需要
某
动态库
,并且该动 态库还未加载到内存中,则系统会自动到这两个默认搜索路径
中去
查找相应的
动态库
文件
Qt/C++设置运行时
动态库
路径的几点说明
到了发布程序的时候你会发现和可执行
文件
同一目录下
文件
数量真多(比如著名的金融软件 https://www.webull.com/ 哎呀我去,目录下一堆
动态库
文件
,滚动条都要拉很久,全部堆一块),此时可能会考虑如何将一些库
文件
...
动态库
找不到
当运行程序
需要
链接
动态库
时,提示找不到相关的.so库,会报错。也就是说,/usr/local/lib目录不在系统默认的库搜索目录中,
需要
将目录加进去。 1、首先打开/etc/ld.so.conf
文件
2、加入
动态库
文件
所在的目录:执行vi...
进程/线程/DLL
15,472
社区成员
49,183
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章