如何在程序中用显式加载的方式使用DLL中的导出类.docxVIP

如何在程序中用显式加载的方式使用DLL中的导出类.docx

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
如何在程序中用显式加载的方式使用DLL中的导出类

如何在程序中用显式加载的方式使用DLL中的导出类(1)2011-05-27 08:572011年5月27日翻译,语言或许会不通顺,语文学的不好,尽请原谅。????引言?xml:namespace prefix = o ns = urn:schemas-microsoft-com:office:office /我已经看过了许多解释在程序中如何用从一个DLL中的导出类的代码。但都是描述隐式连接DLL导出类的用法。跟新我们的DLL文章,在一个程序中有两种方式去用一个DLL中的函数,第一种方式就是简单地将你的程序的源代码的引用标志包含在DLL中。这会使加载者在程序被引用时隐式加载连接需要的DLL。这就是大家所知道的隐式连接。第二种方式就是显式加载所需的DLL(用一个LoadLibrary()函数调用)并且在程序运行时显式连接到所想要的导出标志。换句话说,如果程序决定想要在一个DLL中调用一个函数,它就能将DLL显式加载进进出的地址空间里,获得在DLL中函数的虚拟地址。这种方式的好处是当程序运行时候可以做所有事情并且程序也能够在DLL完成它的任务后从进程中将它卸载掉。正如你所猜想的,这种技术就是众所周知的显式连接。背景知识到目前为止,我所说的都是关于函数,但是如何用从DLL中导出的类呢?在隐式链接DLL中,这不是问题。但是如何显式加载DLL并用导出类呢?在正常情况下,这是无法进行的,我写这篇文章不是为了给你解释它为什么不能做,而是给你一些它如何能做的思路和想法。对了,通过用LoadLibrary()函数调用来加载一个DLL可以用导出类。在进行后面的操作之前,我所要提醒的是下面的方法可以说是有点黑客的行为,如果你计划在你的工程里用它的话,清首先获得你老板的同意。。。(如果你可能获得他/她对于这项技术的同意的话)。这篇文章总的来说是为了你更好的理解并且在某些极端情况下如果你能够不搞非法动作。代码的运用如果你看了例子代码,你会看到我已经创建了一个叫做Calc.DLL的计算动态库,并且在我的UserOfCalc控制台程序里面用了这计算方法。// Calc.DLL 包含了一个导出类?// CCalc类里面包含了三个方法Add,Sub,GetLastFunc()如下所示:?// CALC.H – 声明CCalc类?// 从DLL中导出,引进EXE里???#include tchar.h??#ifdef CALC_EXPORTS#define CALC_API __declspec (dllexport)#else#define CALC_API __declspec (dllimport)#endif?#define SOME_INSTN_BUF 260?class CALC_API CCalc{private:TCHAR m_szLastUsedFunc[SOME_INSTN_BUF];?public:CCalc (); ?int Add (inti, int j);int Sub (inti, int j); TCHAR* GetLastUsedFunc ();?};The implementation of this DLL is as shown in the file Calc.cpp:Calc.cpp中DLL的执行体:#include Calc.h?#include windows.h??BOOL APIENTRY DllMain (HANDLE, DWORD, LPVOID){ return TRUE;}?// Ctor, 初始化m_szLastFuncCalled 数组?CCalc::CCalc (){?memset (m_szLastUsedFunc, 0, sizeof (m_szLastUsedFunc));strcpy (m_szLastUsedFunc, No function used yet);}??intCCalc::Add (inti, int j){strcpy (m_szLastUsedFunc, Add used); return (i + j);}?intCCalc::Sub (inti, int j){strcpy (m_szLastUsedFunc, Sub used); return (i - j);}现在,我们如何显式加载DLL来用Calc类里面的函数呢?步骤如下:第一步就是用LoadLibrary把Calc.dll 动态库加载进程序里。 HMODULE hMod = LoadLibrary (Calc.dll);if (NULL == hMod){printf (LoadLibrary failed\n); return 1;}?如何在程序中用显式加载的

文档评论(0)

zhuwenmeijiale + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:7065136142000003

1亿VIP精品文档

相关文档