C 语言用什么写的6,用c语言写动态链接库(6页)-原创力文档

PAGE / NUMPAGES

近来又有人在群里问如何用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?#include?#include?DLLIMPORT?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)和结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值