求教大佬怎么创建dll文件
如题 ,想写个dll文件不知道,在项目下创建了个dll项目后就不知道怎么写了,哪位大佬指点下,百度上查了好几天,都没有搞明白,对dll文件不太了解,哪位大佬能详细说下 这问题问的真的是太庞大了。。。给你个简单教程,有任何不懂再继续跟帖问:
http://www.cnblogs.com/chio/archive/2007/11/03/948480.html 链接:https://pan.baidu.com/s/1Daut-vJv-rRL752fkgimvw
提取码:aprz
dll文件的写法就跟正常脚本一样,是相同的语法格式。
如果你会用VS的话,直接新建类库文件,正常写代码,编译会后就会得到一个dll文件。
把这个dll复制到你的项目中,然后调用这个dll就可以使用在这个dll中封装的一些函数接口等。 行客 发表于 2018-12-30 19:21
这问题问的真的是太庞大了。。。
给你个简单教程,有任何不懂再继续跟帖问:
创建了。.h和.cpp文件之后后面的就看不懂了
#include <stdio.h>
#include <windows.h>
typedef int(*lpAddFun)(int, int); //宏定义函数指针类型
int main(int argc, char *argv[])
{
HINSTANCE hDll; //DLL句柄
lpAddFun addFun; //函数指针
hDll = LoadLibrary("..\\Debug\\dllTest.dll");
if (hDll != NULL)
{
addFun = (lpAddFun)GetProcAddress(hDll, "add");
if (addFun != NULL)
{
int result = addFun(2, 3);
printf("%d", result);
}
FreeLibrary(hDll);
}
这个代码是什么意思,怎么都在加载dll文件了{:10_266:}{:10_266:}没懂 在这段代码上面的 图6 建立一个非MFC DLL 就是为了建立这个dllTest.dll,你仔细看一下 图6附件的里面还有一个附件可以下载 行客 发表于 2018-12-30 21:27
在这段代码上面的 图6 建立一个非MFC DLL 就是为了建立这个dllTest.dll,你仔细看一下
{:10_266:}上面建了一个工程 工程里建了一个。h文件和。c文件,头文件放着函数声明,源文件放着函数实现,vcdebug里面生产了一个dll文件,不过这个dll能用吗,我看百度好多上面不是说还有一个主函数dllmain来着,这个怎么没有啊{:10_266:}{:10_266:}看资料说dll文件跟exe都差不多一样,本身都是可是可以运行的,这个dll怎么感觉跟我们函数差不多{:10_266:}有点蒙了,还有导出函数是什么 {:10_266:} 调用约定好像有好几种{:10_284:} 行客 发表于 2018-12-30 21:30
图6附件的里面还有一个附件可以下载
附件下不了{:10_266:} dll和exe的PE都没多少区别的,所以基本都很相似。调用约定常见有以下几种:
stdcall
cdecl
fastcall
thiscall
naked call
几种的用法,给你个地址:https://www.cnblogs.com/findumars/p/5356217.html
关于你问的主函数dllmain,我给你解释一下:
The DllMain function is an optional method of entry into a dynamic-link library (DLL)。(简要翻译:对于动态链接库,DllMain是一个可选的入口函数。)这句话很重要,很多初学者可能都认为一个动态链接库肯定要有DllMain函数。其实不然,像很多仅仅包含资源信息的DLL是没有DllMain函数的。
可选就是可以不去写这个函数的实现。但是:
你也看到,在一些例子中,DLL并没有提供DllMain函数,但应用工程也能成功引用DLL。这是因为Windows在找不到DllMain的时候,系统会从其它运行库中引入一个不做任何操作的缺省DllMain函数版本,并不意味着DLL可以放弃DllMain函数。
这样你明白了吧? 关于你有疑问的调用约定,我再简单说一下为什么要使用__stdcall约定:
这是为了使VC++编写的DLL能被其他语言编写的程序调用, 函数的调用方式应显式声明为__stdcall方式,因为在C/C++中,缺省的调用方式为__cdecl。 说的已经够清晰了,再细节最好多查点资料看下。 行客 发表于 2018-12-30 22:08
dll和exe的PE都没多少区别的,所以基本都很相似。调用约定常见有以下几种:
stdcall
cdecl
明白了,谢谢大佬{:10_297:}
页:
[1]