问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c怎么生成dll文件?

发布网友 发布时间:2022-05-04 18:38

我来回答

2个回答

热心网友 时间:2022-06-25 01:39

用 vc 6.0 下的cl.exe 和 link.exe工具,请读下文:
声明:下面这篇文章不是我写的,源自:一个叫,有容乃大 的博客

如何手工编写动态链接库(windows dll)

1.本例介绍在命令行(Console)环境下制作dll的方法
2.读者动手前,请确保在windows中安装有编译、链接工具和必要的函数库文件。
3.本例使用C语言实现.
4.本例中使用路径均为我机器上的绝对路径,读者需根据实际情况调整。

工具要求:

Microsoft的编译器cl.exe
MIcrosoft链接器link.exe

dll制作步骤:
1.编写dll函数实现源代码hello.c

#include

int say_hello(char* name)
{
printf( "hello %s\n ", name);
return 1;
}

2.编写dll函数输出定义文件hello.def.

LIBRARY hello
EXPORTS
say_hello @1

3.编译dll源码,生成dll,lib文件.

3.1 新建命令行窗口
3.2 设置PATH �0�7 INCLUDE �0�7 LIB 3个环境变量.

SET PATH=K:\vcnet\vc7\bin;%PATH%
SET INCLUDE=K:\vcnet\vc7\include;%INCLUDE%
SET LIB=K:\vsnet\Vc7\lib;%LIB%

3.3 编译hello.c

cd K:\Source\dllsample (hello.c和hello.def所在目录)
cl /c hello.c

3.4 链接hello.obj,生成hello.dll,hello.lib两个文件.

link /def:hello.def /dll hello.obj

4.测试dll函数.

4.1 编写测试代码 test.c

extern int say_hello(char* name);
int main(int argc,char** argv)
{
say_hello( "robbie ");
return 0;
}

4.2 编译测试代码test.c

cl /c test.c

4.3 链接test.obj和 hello.lib,生成可执行文件test.exe

link test.obj hello.lib

4.4 运行test.exe,屏幕输出:

hello robbie

至此,一个dll构造完毕.

下面是我自己的一点补充:
如果要在c++下,或者win32 mfc下使用标准c写的dll,必须把上面的声明
extern int say_hello(char* name);改成:extern "C " int say_hello(char* name);

热心网友 时间:2022-06-25 01:39

在VC++中选择新建一个Win32 Dynamic-Link Library。需要建立一个c/c++ head file和一个c/c++ source file并加入工程。头文件中内容为输出函数的声明,源文件中内容为DllMain函数和输出函数的定义。下面是一个最简单的例子。

//dlldemo.h
#ifdef __cplusplus
#define EXPORT extern "C" __declspec(dllexport)
#else
#define EXPORT __declspec(dllexport)
#endif

EXPORT void CALLBACK DllFoo(void) ;

//dlldemo.c
#include <windows.h>
#include "dlldemo.h"

int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
{
return TRUE ;
}

EXPORT void CALLBACK DllFoo(void)
{
MessageBox(NULL,TEXT("This function is exported from a DLL"),TEXT("DllFoo"),MB_OK) ;
return ;
}
头文件预处理中的__declspec是微软增加的“C扩展类存储属性”(C Extended Storage-Class Attributes),它指明一个给出的实例被存储为一种微软特定的类存储属性,可以为thread,naked,dllimport或dllexport. [MSDN原文:The extended attribute syntax for specifying storage-class information uses the __declspec keyword, which specifies that an instance of a given type is to be stored with a Microsoft-specific storage-class attribute (thread, naked, dllimport, or dllexport).] 输出函数必须指明为CALLBACK。 DllMain是dll的入口点函数。也可以不写它。DllMain必须返回TRUE,否则系统将终止程序并弹出一个“启动程序时出错”对话框。 编译链接后,得到动态链接库文件dlldemo.dll和输入库文件dlldemo.lib。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
特别精辟的个性签名(非常经典的个性句子) 特别经典的个性签名(非常惊艳的个性句子) 文艺范十足的个性签名(温柔治愈的个性签名句子) wps文字怎么设置每页头和尾 27岁的女人需要补充哪些营养元素 27岁该重视美容了吗?都可以用哪些方法好些呢? airpods连不上手机怎么回事 - 知百科 腰肌劳损能养好吗? 有一段相声讲的是原始人打猎,唱歌,学说话的,请问名字是什么? 个人征信逾期记录的修复攻略,手把手传授 用C语言编写DLL 在EXCEL表格里面,如何将一列数字的前面几位数替换掉? 关于excel的问题:如何把一整排数字一次性修改呢!悬赏100分,满意再追加1倍.急!! 在excel中我需要替换一列数字,怎么替换? EXCEL怎么把一列的数据替换到另一列数据里面覆盖掉,空格不替换? 学校是自动获取ip的,请问如何查询获取的iP记录?win7系统的。。。 win7系统下如何查看当前的ip地址,用的无线路由器,已经自动获取的那种 转移微信聊天记录到另一台手机的方法 巧克力蛋糕麻薯派的热量是多少? 爆浆是什么意思? 缤纷流心麻薯球的做法步骤图,怎么做好吃 一个巧克力麻薯的重量 陕西高校送学生油泼辣子月饼,陕西的月饼都有哪些口味? 流心麻薯是怎么做的? 巧克力麻薯的做法步骤图,巧克力麻薯怎么做好吃 马斯洛的层次需求理论,并说题说明 求关于“马斯洛需求层次理论”的论文题目? abb变频器用哪个代码改变电动机转速的 论述试述美国心理学家马斯洛需要层次理论 求【基于马斯洛需求层次理论的商务谈判技巧的研究】这篇论文 在C语言中,能简单介绍一下DLL是干什么的么? C+的dll如何用易语言正确调用? 用VB调用c dll , 函数指针如何处理? 用C调用DLL中的函数 dll文件如何用C语言生成 用c语言,纯c做一个dll,里面有两个函数,这两个函数之间能相互调用么 哪些dll文件和c中的库函数有什么区别? 【求助】如何把C编译成dll? c语言dll,怎样常驻内存(或许是多线程) c语言调用dll里的命令并输出 C# 调用 C写的DLL 问题 java 程序调用c的dll怎么配置文件 如何封装c++程序成dll文件 c#调用c生成的DLL,得到其结构体的数据 金牛座的幸运石 炸鸡锁骨加什么香料好吃? 什么没有雷州升级 有没有用蚌壳做的珍珠项链 这款10mm淡紫色珍珠项链值多少钱 珍珠项链有保健作用吗