鱼C论坛

 找回密码
 立即注册
查看: 1696|回复: 12

[已解决]求教大佬怎么创建dll文件

[复制链接]
发表于 2018-12-30 19:16:29 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如题 ,想写个dll文件不知道,在项目下创建了个dll项目后就不知道怎么写了,哪位大佬指点下,百度上查了好几天,都没有搞明白,对dll文件不太了解,哪位大佬能详细说下
最佳答案
2018-12-30 22:08:15
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函数。

这样你明白了吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-30 19:21:32 | 显示全部楼层
这问题问的真的是太庞大了。。。
给你个简单教程,有任何不懂再继续跟帖问:

http://www.cnblogs.com/chio/archive/2007/11/03/948480.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-30 19:21:57 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-30 19:29:23 | 显示全部楼层
dll文件的写法就跟正常脚本一样,是相同的语法格式。
如果你会用VS的话,直接新建类库文件,正常写代码,编译会后就会得到一个dll文件。
把这个dll复制到你的项目中,然后调用这个dll就可以使用在这个dll中封装的一些函数接口等。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-30 20:32:17 | 显示全部楼层
行客 发表于 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文件了没懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-30 21:27:05 | 显示全部楼层
在这段代码上面的 图6 建立一个非MFC DLL 就是为了建立这个dllTest.dll,你仔细看一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-30 21:30:07 | 显示全部楼层
图6附件的里面还有一个附件可以下载
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-30 21:44:58 | 显示全部楼层
行客 发表于 2018-12-30 21:27
在这段代码上面的 图6 建立一个非MFC DLL 就是为了建立这个dllTest.dll,你仔细看一下

上面建了一个工程 工程里建了一个。h文件和。c文件,头文件放着函数声明,源文件放着函数实现,vc  debug里面生产了一个dll文件,不过这个dll能用吗,我看百度好多上面不是说还有一个主函数dllmain来着,这个怎么没有啊看资料说dll文件跟exe都差不多一样,本身都是可是可以运行的,这个dll怎么感觉跟我们函数差不多有点蒙了,还有导出函数是什么 调用约定好像有好几种
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-30 21:59:01 | 显示全部楼层
行客 发表于 2018-12-30 21:30
图6附件的里面还有一个附件可以下载

附件下不了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-30 22:08:15 | 显示全部楼层    本楼为最佳答案   
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函数。

这样你明白了吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-30 22:11:49 | 显示全部楼层
关于你有疑问的调用约定,我再简单说一下为什么要使用__stdcall约定:

这是为了使VC++编写的DLL能被其他语言编写的程序调用, 函数的调用方式应显式声明为__stdcall方式,因为在C/C++中,缺省的调用方式为__cdecl。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-30 22:26:39 | 显示全部楼层
说的已经够清晰了,再细节最好多查点资料看下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-30 22:38:41 | 显示全部楼层
行客 发表于 2018-12-30 22:08
dll和exe的PE都没多少区别的,所以基本都很相似。调用约定常见有以下几种:
stdcall
cdecl

明白了,谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 04:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表