v c++做个win32的dll

这就准备咱们怎么去用VC++做个WIN32的DLL了。咱们先把环境搭好。01的时候,咱们得注意新建工程选哪样。第一种呢,你点empty这个选项,再点Finish。你会看到这工程里啥都没,连.h文件都没。这样选主要是不想被系统给的模板牵着鼻子走,想完全按自己的意思来组织代码。 第二种呢,你选simple,点Finish后,系统就会自动给你弄出一些东西来。比如StdAfx.h和StdAfx.cpp,这就是预编译头文件。还有个simple.cpp,不过这文件只有个框架,没什么实质性的函数内容。要注意的是没有专门给simple.cpp配个.h文件,声明都是直接写在StdAfx.h里头的。你这么编译链接完,Debug目录里就能出个dll,不过呢,这时候还没有.lib文件呢。所以想用隐式链接的话,你得额外留意这一点。 第三种选择是some,这样的话,除了刚才的文件以外,它还多给你一个some.h文件。你要是想用导出库一步到位,直接选这个就行。这时候函数的实现可以放在some.cpp里。你把编译链接做完了,就会同时出现.lib还有.exp文件,这样无论是隐式链接还是导入库引用都方便。 02的时候咱们聊聊导出的方式。这里有两种流派只能选一个:一种是用关键字修饰函数。你在cpp里头直接给函数加个修饰符就行,比如:extern "C" __declspec(dllexport) int max(int a, int b)。编译链接完后Debug目录下就有标准格式的dll了。这种方法写法简单,缺点就是函数名被修饰成一串字符了,你显式链接的时候必须名称完全一样才行。 为了避免命名冲突或者跨语言调用的时候出问题,你可以把extern "C"放在函数声明前面。这样编译器就按C语言规则处理了,名称就不会被C++搞乱了。 另一种流派是用DEF文件。你先把源文件里的那个修饰符给删了吧。然后在工程根目录下新建个MyDll.def文件用记事本写进去这些内容: LIBRARY MyDll EXPORTS max min 注意这里EXPORTS行只写函数名就行,别写类型和参数了格式错了DLL就生成失败了。把这个DEF文件也加入项目里头再编译链接看看效果吧。实测一下如果没关联DEF文件生成的DLL就是个空壳子了Depends工具也看不出什么导出项呢。 经过对比发现DEF方式导出的函数名特别干净像一张白纸一样显式链接的时候不用怕字符被截断或者混淆掉了。 03小结一下吧如果只是自己内部小模块函数也不多就直接用_declspec(dllexport)的办法就行啦如果要跨项目跨语言调用的时候必须得选DEF文件而且.def内容得和实际导出函数一一对应才行啊还有就是为了避免命名冲突优先使用extern "C"的话如果还是想要C++的特性就把修饰符写在类或者命名空间上别写在函数前头了就这样啦搞定了VC+WIN32 DLL就这么搞定了下次再见啦。