- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
近来又有人在群里问如何用c语言编制dll文件(动态链接库)。原来没有对这个问题太在意过,也没有尝试过任何解决方案,毕竟原来我是用vb的(现在用.net),做个dll只不过是点选一下建立activeX?dll工程的图标而已。今天在网上与朋友聊天,看了他指给我的几个几个文件,用MingW将C程序编译成dll文件的例子,我恍然大悟,原来讲C程序编译成dll文件只不过是在要公开的接口函数声明前面加上几个特定的修饰符而已。于是用dev-cpp建了个dll的默认文档,一切都很明了。(我把源代码贴在下面)/*dll.h文件*/#ifndef?_DLL_H_#define?_DLL_H_#if?BUILDING_DLL#?define?DLLIMPORT?__declspec?(dllexport)#else?/*?Not?BUILDING_DLL?*/#?define?DLLIMPORT?__declspec?(dllimport)#endif?/*?Not?BUILDING_DLL?*/DLLIMPORT?void?HelloWorld?(void);#endif?/*?_DLL_H_?*//*dllmain.c文件*//*?Replace?dll.h?with?the?name?of?your?header?*/#include?dll.h#include?windows.h#include?stdio.h#include?stdlib.hDLLIMPORT?void?HelloWorld?(){????MessageBox?(0,?Hello?World?from?DLL!\n,?Hi,?MB_ICONINFORMATION);}BOOL?APIENTRY?DllMain?(HINSTANCE?hInst?????/*?Library?instance?handle.?*/?,???????????????????????DWORD?reason????????/*?Reason?this?function?is?being?called.?*/?,???????????????????????LPVOID?reserved?????/*?Not?used.?*/?){????switch?(reason)????{??????case?DLL_PROCESS_ATTACH:????????break;??????case?DLL_PROCESS_DETACH:????????break;??????case?DLL_THREAD_ATTACH:????????break;??????case?DLL_THREAD_DETACH:????????break;????}????/*?Returns?TRUE?on?success,?FALSE?on?failure?*/????return?TRUE;}关于以上代码的几点解释:一、__declspec?(dllexport):这是关键,它标志着这个这个函数将成为对外的接口。(以下是我在网上下载的dllexport、dllimport、_declspec的一些说明):使用包含在DLL的函数,必须将其导入。导入操作时通过dllimport来完成的,dllexport和dllimport都是vc(visual?C++)和bc(Borland?C++)所支持的扩展的关键字。但是dllexport和dllimport关键字不能被自身所使用,因此它的前面必须有另一个扩展关键字__declspec。通用格式如下:__declspec(specifier)其中specifier是存储类标示符。对于DLL,specifier将是dllexport和dllimport。而且为了简化说明导入和导出函数的语句,用一个宏名来代替__declspec.在此程序中,使用的是DllExport。如果用户的DLL被编译成一个C++程序,而且希望C程序也能使用它,就需要增加“C”的连接说明。#define?DllExport?extern?C__declspec(dllexport),这样就避免了标准C++命名损坏。(当然,如果读者正在编译的是C程序,就不要加入extern?“C”,因为不需要它,而且编译器也不接受它)。二、BOOL?APIENTRY?DllMain?()说明:(以下是我在网上收集的资料)1、每一个DLL必须有一个入口点,DllMain是一个缺省的入口函数。DllMain负责初始化(Initialization)和结束(Termination)工作,每当一个新的进程或者该进程的新
您可能关注的文档
最近下载
- 必威体育精装版非计划再次手术登记表.docx VIP
- 专题1.11 探索三角形全等的条件(HL)(分层练习)-2023-2024学年八年级数学上册基础知识专项突破讲与练(苏科版).docx VIP
- 食源性疾病暴发事件应急处置技术方案.doc VIP
- 2013造价实训案例第六题通用安装电气及自动化工程电气设备照明.pdf
- 2024跟踪光伏支架技术规范.docx
- 湘文艺版 五年级音乐上册第4课《(演唱)祖国印象》教学设计.doc
- 2024届各地必威体育精装版模考语言文字运用新题(精选20题)教师版公开课教案教学设计课件资料.docx VIP
- 专题1.22 全等三角形几何模型(一线三垂直)(分层练习)(综合练)-2023-2024学年八年级数学上册基础知识专项突破讲与练(苏科版).docx VIP
- 罐头装箱机的设计毕业设计论文.doc
- 作业的布置-批改.ppt VIP
文档评论(0)