Windows DLL中调用资源碰到的问题

Windows DLL中调用资源碰到的问题

作者:Kagula

日期:2010-11-25

概要

使用C语言编写Windows DLL。在DLL中调用资源碰到的相关问题及解决。

需要特别注意的关键词下面已经用红色标出来了。

这里的开发环境是Visual Studio 2008 + SP1 + Windows XP3

正文

DLL里存放的是函数的集合,在DLL函数里想要取得资源首先必需获得DLL的实例。

[Step1]经测试用GetModuleHandle(NULL)是不能得到当前DLL实例的,所以得在DLL中添加DllMain函数,源码如下:

//HINSTANCE       hInst=NULL;

BOOL APIENTRY DllMain(HANDLE hModule,DWORD  ul_reason_for_call,LPVOID lpReserved)

{

     switch(ul_reason_for_call)

     {

     case DLL_PROCESS_ATTACH:

         hInst = (HINSTANCE)hModule;

     case DLL_PROCESS_DETACH:

         break;

     }

     return TRUE;

}

取得hInst文件后就可以用FindResource函数取得已经链接到动态库的资源。如果你在DLL中要实现的功能不需要DLL实例句柄,也可以不定义DllMain函数。在DLL装载的时候,如果有DllMain函数,则它自动会被调用,如果没有也不影响对DLL文件中其它函数的调用。

[Step2]手动编译资源文件(如果是使用VisualStudio2008自动生成makefile文件不需要这一步)

makefile文件的object dependencies中添加如下两行代码

MyResFile.res:  $(ABSOLUTE_PATH)/text/resource/ MyResFile.rc

     rc /d "_UNICODE" /d "UNICODE" /fo $( ABSOLUTE_PATH)/text/resource/MyResFile.rc

注意rc命令前得有个Tab符号,这两行代码将把MyResFile.rc资源源代码文件,编译成MyResFile.res资源文件二进制文件,产生的res文件的位置会和源文件在同一个目录中。

[Step3]手动链接资源文件(如果是使用VisualStudio2008自动生成makefile文件不需要这一步)

找到OBJS变量(或许在你的工程中它不叫这个名字),这个变量存放的是建立待链接文件列表,最后OBJS变量会传递给link命令,作为link命令的输入参数,把链接清单中的文件链接成一个文件。参考下面这一行OBJS变量的定义

OBJS=a.obj b.obj c.obj MyResFile.res

[Step4]检查资源文件有没有被链接到DLL中去。[启动Visual Studio2008]->[Ctrl+O]打开DLL文件,如果资源文件已经集成到DLL文件,你现在就应该能看到。

后言

   Windows下的Visual Studio 2008 C编程工具很多命令同Linux下的编程工具,比如cl对应gccnmake对应make。各种计算机程序语言之间的语法和语义大多能直接做映射,大道理差不多,看一个人应用某种编程语言的能力,关键还在于对某种编程语言细节的了解程度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kagula086

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值