DLL的制作:devc++也能制作动态链接库,现在我们来介绍用C语言做dll的方法。首先,打开devc++,文件->新建->工程,
在弹出的新工程对话框中选择“DLL”,选择实现语言为C语言,修改工程名为“MyProject”,确定,
选择保存目录,这里用名为“DLLDemo”文件夹。然后在devc++的代码编辑区会出现两个文件“dllmain.c”和“dll.h”。
----------------------------------------------------------------------------------------------------------------------
/****dllmain.c****/
/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
DLLIMPORT void HelloWorld ()
{
MessageBox (0, "Hello World from DLL!\n", "Hi", MB_ICONINFORMATION);
// 模拟按键
keybd_event('R', 0, 0 ,0);
keybd_event('R', 0, KEYEVENTF_KEYUP,0);
//keybd_event(VK_LWIN, 0, 0 ,0);
//keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);
}
BOOL APIENTRY DllMain (HINSTANCE hInst/* Library instance handle. */ ,
DWORD reason/* Reason this function is being called. */ ,
LPVOID reserved/* Not used. */ )
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
/* Returns TRUE on success, FALSE on failure */
return TRUE;
}
----------------------------------------------------------------------------------------------------------------------
/****dll.h****/
#ifndef _DLL_H_
#define _DLL_H_
#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */
DLLIMPORT void HelloWorld (void);
#endif /* _DLL_H_ */
----------------------------------------------------------------------------------------------------------------------
其中“dllmain.c”是用来定义函数的(如语句:
DLLIMPORT void HelloWorld ()
{
MessageBox (0, "Hello World from DLL!\n", "Hi", MB_ICONINFORMATION);
}
)。
“dll.h”用来声明导出函数(如语句:DLLIMPORT void HelloWorld (void);)。现在我们来加入自己的函数FunT()和FunT1()。
在devc++编辑区的右边“工程管理”框中右击“MyProject”在弹出菜单中选择“新建单元”,像这样新建两个单元,在出现的空白编辑区里分别键入下面两段代码,并分别保存为“FunT1.c”和“FunT.c”。
----------------------------------------------------------------------------------------------------------------------
/****FunT1****/
#include "dll.h"
#include <windows.h>
#include <string.h>
int FunT1(int a,int b)
{
char output[1000];
char st[20];
int c=a+b;
_itoa(c, st, 10);
strcpy(output,"this sum of integer is :");
strcat(output,st);
MessageBox(NULL,output,"show console output in MessageBox",MB_OK);
return (0);
}
----------------------------------------------------------------------------------------------------------------------
/****FunT****/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include "dll.h"
int FunT(int a,int b)
{
int c =a+b;
printf("%d",c);
//system("PAUSE");
return(c);
}
----------------------------------------------------------------------------------------------------------------------
注意到我的函数包含头文件有什么不同,多了一个“dll.h”这是必须的,然后在“dll.h”
中加入两句:“DLLIMPORT int FunT1(int,int);
DLLIMPORT int FunT(int,int);”(不包括引号)。
也就是加在示例函数声明“DLLIMPORT void HelloWorld (void);”的后面。
现在编译我们的“MyProject”,无错误的话(笔者编译通过)会在“DLLDemo”目录下生成一名为“Output”的文件夹,打开之会发现又一文件夹“MingW”,打开之出现五个文件,其中的两个就是我们需要的,一个为“libMyProject.a”另一个就是“MyProject.dll”。用“Dll导出函数查看器”查看“MyProject.dll”会发现其中有三个导出函数,其中两个是我们自定义的,一个是DLL工程自动添加的,你可以将其删除。
好的,现在我们来调用写好的dll。关闭当前工程,重新建立一个工程,选择控制台程序(Console Application),实现语言为C语言。命名为“testmain”。将其保存在“MyProject.dll”和“libMyProject.a”所在的目录下,在其中添加如下代码:
----------------------------------------------------------------------------------------------------------------------
/****testmain.c****/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FunT1(6,7);
//printf("%d\n",c);
//FunT(4,5);
//HelloWorld();
//system("PAUSE");
return 0;
}
----------------------------------------------------------------------------------------------------------------------
右击“工程管理框”中的工程名,选择“工程属性”在弹出的对话框中单击“附加的命令行选项”选项卡。单击“加入库或者对象”按钮选择“libMyProject.a”,编译运行之。
好了,关于用devc++制作dll,介绍完了。希望对大家有帮助,如果需要用其他程序调用(如wxWidget工程中),可以加入“extern "C" _declspec(dllexport) int FunT1 (int a,int b);”语句(不包含引号)调用。有时候得用VC使用我们制作好的dll,可是找不到.lib文件,怎么办呢?可以用以下语句调用:
----------------------------------------------------------------------------------------------------------------------
/****vctestmain.c****/
#include <Windows.h>
void main()
{
typedef int (*FUNT)(int ,int);//函数指针类型
HINSTANCE Hint = LoadLibrary("DllProject5.dll");//加载我们刚才生成的dll
FUNT FunT1 = (FUNT)GetProcAddress(Hint,"FunT1");//取得dll导出的FunT1方法
FunT1(5,4);
}
----------------------------------------------------------------------------------------------------------------------
<End>
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
相关推荐
鉴于devc++资料较少,本文介绍了用devc++制作和调用dll的一般方法。是笔者自己的整理,希望对大家有用。
描述了如何从vc中调用dev-c++写的dll的过程与方法。 1、设置导出关键字__stdcall 2、修改vc调用方式为stdcall 3、实现函数调用call
将现有的C++类转换成dll动态链接库 C++类转换成dll dll动态链接库
vc检测DLL的版本号
本工具主要是用于查看C/C++/C#中dll动态链接库文件中的方法!
本文实例讲述了C++编写DLL动态链接库的步骤与实现方法。分享给大家供大家参考,具体如下: 在写C++程序时,时常需要将一个class写成DLL,供客户端程序调用。这样的DLL可以导出整个class,也可以导出这个class的某个...
立象条码打印最新dll动态链接库4.04,包含说明和各种语言例子
DLL动态链接库嵌入exe可执行文件; 目录 一 DLL动态链接库实现 ① 通过MFC建立的MFC规则链接库 二 在执行文件中EXE自定义动态链接库资源文件加载到资源文件中 ① 在EXE插入自定义资源 三 嵌入到EXE文件...
反编译软件,可将动态链接库反编译回c/c++
dll链接库,关于dll动态链接库的一些小用法
主要介绍了在Visual Studio中用C++语言创建DLL动态链接库图文教程,本文详细讲解了DLL库的创建过程,并给出了代码示例,需要的朋友可以参考下
c#开发框架下调用c++开发的dll动态库,实现跨语言开发功能。
VS2019c++装换为动态链接库DLL(亲测有效). 一、实验环境 VS2019、Win10 二、创建动态链接库(DLL) 本人完全按照上面的步骤一步步来的,完成的很漂亮!!!步骤很清晰,希望能帮助大家。
【工控老马出品,必属精品,亲测校正,质量保证】 资源名:C#版 OPC dll动态...源码说明: 这是基于C#版的 OPC dll动态链接库全套合集 可直接在工程程序中引用来使用 非常方便 适合人群:新手及有一定经验的开发人员
MFC71动态链接库,为缺少改动态链接库的程序 注册既可用
Visual C++DLL动态链接库编程,详细讲解DLL,对初学者很有帮助
深入浅出Visual_C++动态链接库(Dll)编程 讲的比较详细
C#加载C++\C的DLL动态链接库
msxml4.dll mssoap30.dll 动态链接库 短信 网关所需要的dll安装文件。
运行基本qt5程序所需的动态链接库