c怎么写dll

1. 怎样用C编写DLL?

要做自己的 动态连接库,首先要知道DLL在VC5.0中都有哪几种分类。

VC支持三种DLL,它们是: 1.Non-MFC Dlls 2.Regular Dlls 3.Extension Dlls Note:翻译措辞不当,故遇到术语是引用原词 Non-MFC DLL:指的是不用MFC的类库结构,直接用C语言写的DLL,其输出的函数一 般用的是标准C接口,并能被非MFC或MFC编写的应用程序所调用。LL, Regular DLL:和下述的Extension Dlls一样,是用MFC类库编写的。

明显的特点是 在源文件里有一个继承CWinApp的类。其又可细分成静态连接到MFC和动态连接到MFC上 的。

但静态连接到MFC的动态连接库只被VC的专业般和企业版所支持。 Extension DLL:用来实现从MFC所继承下来的类的重新利用,也就是说,用这种类 型的动态连接库,可以用来输出一个从MFC所继承下来的类。

Extension DLL使用MFC的 动态连接版本所创建的,并且它只被用MFC类库所编写的应用程序所调用。 各位看到这里如果眼有点花或头有点晕,请别泄气,再看两遍,然后继续往下看, 定有收获。

标 题: 关于VC中的DLL的编程[1] 这一节介绍Non-MFC DLLs的编写方法。下面是一个通用的 写法: BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call, LPVOID lpReserved) { switch( ul_reason_for_call ) { case DLL_PROCESS_ATTACH: 。

. case DLL_THREAD_ATTACH: 。

. case DLL_THREAD_DETACH: 。

. case DLL_PROCESS_DETACH: 。

. } return TRUE; } 每一个DLL必须有一个入口点,这就象我们用C编写的应用程序一样, 必须有一个WINMAIN函数一样。

在这个示例中,DllMain是一个缺省的入口函数,你不需要编写自己 的DLL入口函数,并用linker的命令行的参数开关/ENTRY声明。用这个缺 省的入口函数就能使动态连接库被调用时得到正确的初始化,当然了,你 不要在初始化的时候填写使系统崩溃的代码了。

参数中,hMoudle是动态库被调用时所传递来的一个指向自己的句柄 (实际上,它是指向_DGROUP段的一个选择符) ul_reason_for_call是一个说明动态库被调原因的标志。当进程或线程 装入或卸载动态连接库的时候,操作系统调用入口函数,并说明动态连接库 被调用的原因。

它所有的可能值为: DLL_PROCESS_ATTACH: 进程被调用 DLL_THREAD_ATTACH: 线程被调用 DLL_PROCESS_DETACH: 进程被停止 DLL_THREAD_DETACH: 线程被停止 lpReserved是一个被系统所保留的参数。 入口函数已经写了,盛下的也不难,你可以在文件中加入你所想要输 出的函数或变量或c++类或、或、或、?好象差部多了。

Look here!现在就 要加入一个新的输出函数了: void _declspec(dllexport) JustSoSo() { MessageBox(NULL,"It's so easy!","Hahaha。

",MB_OK); } 要输出一个类也可以,如下: class _declspec(dllexport) Easy { //add your class definition。 }; 各位一定注意到在输出函数或类是我用到_declspec(dllexport), 这是VC提供的一个关键字,用它可在动态连接库中输出一个数据、一个函数或一个类。

用这个关键字可省你不少事,你不用在.DEF文件 中说明我要输出这个类、那个函数的。 Ok!各位照着上面的例子试着敲敲看,Just so easy! 先说到这了。

2. 用C语言如何写DLL?

//head file: asd.h

#ifdef _cplusplus

extern "C"{

#else

#endif

#ifdef HEAD_DLL

#define DLL_EXPORT _declspec(dllexport)

#else

#define DLL_EXPORT

#endif

int DLL_EXPORT asd_main(char* file_in, char* file_out);

#ifdef _cplusplus

}

#endif

//C file: asd.c

#include "asd.h"

int DLL_EXPORT asd_main(char* file_in, char* file_out)

{

FILE *in, *out;

in = fopen(file_in,"rb");

if(in == NULL)

return 0;

out = fopen(file_out,"wb");

if(out == NULL)

return 0;

//add code what you want:

}

3. c怎么生成dll文件

用 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 ¦ INCLUDE ¦ 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);

4. 使用vc++6.0 如何编写dll

资源简介一、前言 自从微软推出16位的Windows操作系统起,此后每种版本的Windows操作系统都非常依赖于动态链接库(DLL)中的函数和数据,实际上Windows操作系统中几乎所有的内容都由DLL以一种或另外一种形式代表着,例如显示的字体和图标存储在GDI DLL中、显示Windows桌面和处理用户的输入所需要的代码被存储在一个User DLL中、Windows编程所需要的大量的API函数也被包含在Kernel DLL中。

在Windows操作系统中使用DLL有很多优点,最主要的一点是多个应用程序、甚至是不同语言编写的应用程序可以共享一个DLL文件,真正实现了资源"共享",大大缩小了应用程序的执行代码,更加有效的利用了内存;使用DLL的另一个优点是DLL文件作为一个单独的程序模块,封装性、独立性好,在软件需要升级的时候,开发人员只需要修改相应的DLL文件就可以了,而且,当DLL中的函数改变后,只要不是参数的改变,程序代码并不需要重新编译。这在编程时十分有用,大大提高了软件开发和维护的效率。

既然DLL那么重要,所以搞清楚什么是DLL、如何在Windows操作系统中开发使用DLL是程序开发人员不得不解决的一个问题。本文针对这些问题,通过一个简单的例子,即在一个DLL中实现比较最大、最小整数这两个简单函数,全面地解析了在Visual C++编译环境下编程实现DLL的过程,文章中所用到的程序代码在Windows98系统、Visual C++6.0编译环境下通过。

二、DLL的概念 DLL是建立在客户/服务器通信的概念上,包含若干函数、类或资源的库文件,函数和数据被存储在一个DLL(服务器)上并由一个或多个客户导出而使用,这些客户可以是应用程序或者是其它的DLL。DLL库不同于静态库,在静态库情况下,函数和数据被编译进一个二进制文件(通常扩展名为*.LIB),Visual C++的编译器在处理程序代码时将从静态库中恢复这些函数和数据并把他们和应用程序中的其他模块组合在一起生成可执行文件。

这个过程称为"静态链接",此时因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行。 在动态库的情况下,有两个文件,一个是引入库(.LIB)文件,一个是DLL文件,引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中所要调用的函数的内存地址,这样当一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。

从上面的说明可以看出,DLL和.LIB文件必须随应用程序一起发行,否则应用程序将会产生错误。 微软的Visual C++支持三种DLL,它们分别是Non-MFC Dll(非MFC动态库)、Regular Dll(常规DLL)、Extension Dll(扩展DLL)。

Non-MFC DLL: 指的是不用MFC的类库结构,直接用C语言写的DLL,其导出的函数是标准的C接口,能被非MFC或MFC编写的应用程序所调用。Regular DLL: 和下述的Extension Dlls一样,是用MFC类库编写的,它的一个明显的特点是在源文件里有一个继承CWinApp的类(注意:此类DLL虽然从CWinApp派生,但没有消息循环),被导出的函数是C函数、C++类或者C++成员函数(注意不要把术语C++类与MFC的微软基础C++类相混淆),调用常规DLL的应用程序不必是MFC应用程序,只要是能调用类C函数的应用程序就可以,它们可以是在Visual C++、Dephi、Visual Basic、Borland C等编译环境下利用DLL开发应用程序。

常规DLL又可细分成静态链接到MFC和动态链接到MFC上的,这两种常规DLL的区别将在下面介绍。与常规DLL相比,使用扩展DLL用于导出增强MFC基础类的函数或子类,用这种类型的动态链接库,可以用来输出一个从MFC所继承下来的类。

扩展DLL:是使用MFC的动态链接版本所创建的,并且它只被用MFC类库所编写的应用程序所调用。例如你已经创建了一个从MFC的CtoolBar类的派生类用于创建一个新的工具栏,为了导出这个类,你必须把它放到一个MFC扩展的DLL中。

扩展DLL 和常规DLL不一样,它没有一个从CWinApp继承而来的类的对象,所以,开发人员必须在DLL中的DllMain函数添加初始化代码和结束代码。MID 驱动分析之一: TP下载通过IBM存储解决方案应对信息爆炸问题Qt 游戏开发必备!【下载】Android图书及教学视频您的IT安全来自System X服务器Win8 Winrt中高性能处理多条件语句。

5. 用C语言编写DLL

一.动态链接库(DLL)结构 ——DLL中定义有两种函数:导出函数(export function)和内部函数 (internal function),导出函数可以被其他模块调用,内部函数只能在DLL内部使用。

我们在用C++定制DLL文件时,需要编写的就是包含导出函数表的模块定义文件(.DEF)和实现导出函数功能的C++文件。下面以Sample.dll为例介绍DEF文件和实现文件的结构: ——1.模块定义文件(.DEF)是由一个或者多个用于描述DLL属性的模块语 句组成的文本文件,每个.DEF文件至少必须包含以下模块定义语句: 第一个语句必须是LIBRARY语句,指出DLL的名字。

EXPORTS语句列出被导出函数的名字。 可以使用DESCRIPTION语句描述DLL的用途(此句可选)。

";"对一行进行注释(可选) ——2.实现文件(.cpp文件为例) ——实现入口表函数的.cpp文件中,包含DLL入口点处理的API函数和导出 函数的代码。

6. C++ 制作dll文件

1.在程序前面加一行代码

#pragma comment(linker,"/dll")

意思是告诉连接器,输出的是dll格式。这个好处是不用手动去修改工程属性。

2.或者vc编译器

新建工程,选择dll工程,然后将的示范cpp替换他原先的cpp。这样vc会自动设置连接器属性,其中包括输出dll

3.或者手动去修改工程属性,找到输出格式那里,将exe换成dll

建议:用第一个方法吧,看着专业点,用起来也简单。 其中dll编程不是光输出一个dll格式的东西就算完了,因为用的示范代码,所以不会存在额外问题了。如果要自己写,还要注意下mian函数入口的名称,以及导入导出函数的格式写法。一般 windos编程教程书也会写dll编程部分,要是想深究可以去查阅下。

其实dll编程,就多了一丁点东西而已,不是很复杂。

c怎么写dll

转载请注明出处育才学习网 » c怎么写dll

知识

个人资质怎么写

阅读(817)

本文主要为您介绍个人资质怎么写,内容包括怎么写求职意向,简历的个人资质怎么写,个人资质是什么意思,简历中的个人资质怎么写,个人资质及技能情况怎么写。就是曾经干过什么行业,什么岗位,什么职务,取得何种工作上的业绩或者成就,自身具备哪些优

知识

朋友的请柬怎么写

阅读(242)

本文主要为您介绍朋友的请柬怎么写,内容包括写给朋友的请帖怎么写,朋友之间的请帖怎么写,结婚后宴请朋友请柬该怎么写。亲爱的XXX本人XXX与配偶XXX,订于XXXX年XX月XX日,在XXXXX地址的XX酒店举行婚礼,届时请您携带家属参加,本人不胜感激,

知识

群发邮件怎么写

阅读(188)

本文主要为您介绍群发邮件怎么写,内容包括群发邮件格式,群发邮件格式,怎样填写群发邮件主题及内容。群发邮件格式技巧:发件人一般的邮件群发工具都会可以设置发件人,要设置一个合理的,让客户看到之后比较信任的发件人。这一点很容易被人忽视。

知识

润的英文怎么写

阅读(201)

本文主要为您介绍润的英文怎么写,内容包括“湿润的”英语单词怎么拼,迈润的英文名怎么写,黄色润英文名怎么写和签名怎么写帮个忙谢谢。SERENA 中文:塞丽娜 (拉丁)"温和;沉著的"。SERENA给人两种不同的印象:可爱活泼充满惊喜的女孩;或是文静胆怯、虔

知识

周末的单词怎么写

阅读(159)

本文主要为您介绍周末的单词怎么写,内容包括周末的英语单词怎么写,周末的英语单词怎么写,周一至周日英语怎么写。周末的英语:weekend读音:英 [ˌwiːkend]美 [wiːkend] n. 周末vi. 过周末adj. 周末的词汇搭配:spe

知识

怎么写自我推荐书

阅读(163)

本文主要为您介绍怎么写自我推荐书,内容包括自我推荐书怎么写啊,怎样写一份自我推荐书,怎么写自我推荐书。自荐信的写法内容导读说明胜任某项工作的条件。这是自荐信的核心部分,主要是向对方说明你有知识、有经验。有专业技能、有与工作要求

知识

灾拼音怎么写的

阅读(205)

本文主要为您介绍灾拼音怎么写的,内容包括人们忙着摘棉花的拼音怎么写,钻,旱,灾,泉,滴,端,朝,银,的拼音怎么写,灾的笔顺怎么写。yueliang,轻声椰子树ie ie ie,月牙弯弯,üe üe üe.小ü小ü有礼貌,见到jq x就摘帽。声母儿歌音节拼读儿歌拼读音

知识

夸夸我的作文怎么写

阅读(151)

本文主要为您介绍夸夸我的作文怎么写,内容包括《夸夸我的》这篇作文怎样写,夸夸我的小学作文怎么写,夸夸我的同学作文怎么写。qzwsxedcrvfvbsfntd我的妈妈三十出头,是一个爱看书,负责的人。这两点在生活的点点滴滴中都能体现出来。 家里的书

知识

慈母的慈怎么写

阅读(258)

本文主要为您介绍慈母的慈怎么写,内容包括墓碑慈母的慈字写错了怎样办,慈母的慈是什么意思,慈母的慈是什么意思。慈母中慈是:仁爱,和善慈拼音:cí简体部首:心五笔86:uxxn五笔98:uxxn总笔画:13笔顺编码:捺撇横折折捺折折捺捺折捺捺解释:

知识

篆书的夏字怎么写

阅读(268)

本文主要为您介绍篆书的夏字怎么写,内容包括(夏)字篆书写法,(夏)字篆书写法,篆体字夏美怎么写法。夏小篆字体

知识

结婚韩语怎么写

阅读(319)

本文主要为您介绍结婚韩语怎么写,内容包括请问韩语的我要结婚怎么说啊在线急求啊,老公韩语怎么写,我们结婚吧用韩语怎么写。난 결혼하겠어요 nan kiao long ha gai sao you여자들이 결혼하시죠 yao za de li kiao lo

知识

房子公证怎么写

阅读(161)

本文主要为您介绍房子公证怎么写,内容包括房产公证怎样写,公证房子的公证怎么写才好,求问公证房子的公证怎么写才好。房产公证书不用知道怎样写。公证处有专门的房产公证书格式,所以不用提前准备写好房产公证书,也可以不用知道房产公证书是怎

知识

纱拼音怎么写的

阅读(264)

本文主要为您介绍纱拼音怎么写的,内容包括沙字拼音怎样写,“沙字”大写拼音怎么写,网纱的拼音怎么写。

知识

繁体吟字怎么写

阅读(138)

本文主要为您介绍繁体吟字怎么写,内容包括吟的繁体字怎么写,吟的繁体字怎么写,吟的繁体字吟怎么写呢。笔的繁体形式为“笔”。

知识

dll文件怎么写

阅读(145)

本文主要为您介绍dll文件怎么写,内容包括dll是什么文件格式,dll文件用什么语言写或者怎么制作,软件中的DLL等文件是怎么写出来的..。DLL的全称是Dynamic Link Library, 中文叫做“动态链接文件”。在Windows操作系统中, DLL对于程序执行是非

知识

怎么写dll文件

阅读(170)

本文主要为您介绍怎么写dll文件,内容包括如何编辑DLL文件,怎样编写dll文件,我想写一个dll文件,供大家用求教怎么写.net。呵呵.dll 动态链接库文件。很多编程软件都可以写出dll文件。你这种情况写一下是没用的 该DLL动态链接库文件已经不存

知识

怎么写dll

阅读(132)

本文主要为您介绍怎么写dll,内容包括大侠怎么写DLL?,如何去编写修改DLL文件,dll是怎么写出来的。我从数据库中取出一个记录,然后把它存为HTML文件,接着用WEBBROWERS浏览,并按所见的格式将起打印出来,最后再把他删了,用程序我

知识

易语言dll怎么写

阅读(179)

本文主要为您介绍易语言dll怎么写,内容包括易语言的DLL怎么写,易语言DLL接口该怎么写,易语言DLL命令怎么写呢我要弄打开文件。.版本 2.支持库 xplib.支持库 shell.支持库 spec.程序集 窗口程序集1.程序集变量 输入法句柄.子程序 __启动窗口

知识

dll文件的打开方式是什么

阅读(282)

dll文件的打开方式如下:1.首先,打开电脑,用windows徽标键R,输入regedit,按回车键,确认打开注册表;2.确认打开注册表后,找到键值计算机,会发现有openwithlist和openwithprogids,将其他的文件夹全部删除;3.然后,分别打开openwi

知识

3dmax打开文件时提示加载插件DLL出错是什么原因

阅读(427)

以下是该设备打开文件时加载出错的原因以及解决措施:1.检查打印机是否已经和计算机中的对应端口连接。2.系统文件损坏导致程序出错,无法连接打印机也可能是系统中与添加打印机程序相关的一些系统文件意外损坏或丢失。3.导致添加打印机程序

知识

Dll注入器干什么用的

阅读(220)

1.OpenProcess获得要注入进程的句柄;2.VirtualAllocEx在远程进程中开辟出一段内存,长度为strlen(dllname)+1;3.WriteProcessMemory将Dll的名字写入第二步开辟出的内存中;4.CreateRemoteThread将Lo

知识

用什么软件可以打开以DLL为后缀的文件

阅读(209)

DLL函数查看器。DLL文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件

[/e:loop]