`

用devc++制作DLL动态链接库的方法

阅读更多

DEV-C++ 技术文档

—— devc++ 制作动态链接库的方法

文档作者:高纯

Email sfme@qq.com

云南国防工业职业技术学院光电工程系( 07 级)

本文涉及一些 devc++ 的相关技术,都是笔者经过一个假期,收集资料和实验得出的一些技术经验。由于 devc++ 方面的资料较少,所以写成文档,拿出来供大家参考。好!我们开始。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

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++制作动态链接库

    ### 用Dev-C++制作动态链接库(DLL)详解 #### 概述 动态链接库(Dynamic Link Library,简称DLL)是一种在Windows操作系统下广泛使用的共享库格式。它允许程序和其他模块共享代码和数据,从而提高了软件开发的效率...

    vc调用dev-c++动态链接库dll示例

    首先,我们来看标题中的关键点:“vc调用dev-c++动态链接库dll示例”。这表明我们将使用VC作为客户端应用程序,调用由Dev-C++开发并编译的DLL。Dev-C++是一款轻量级的C/C++集成开发环境,而VC则是微软提供的专业级...

    visual c++检测DLL动态链接库的版本号

    vc检测DLL的版本号

    C# 编译程序引用 C++DLL 托管动态链接库实例

    C# 调用C++.DLL动态链接库时,构建与 C# 程序进行互操作的C++.DLL动态链接库有 3 种方法,其中托管动态链接库最方便,在 C# 中直接引用,即可引用C++.DLL的类。 3.2、C++ 托管动态链接库加快了程序构建和重复利用 ...

    dll动态链接库和c++依赖库缺失修复工具

    总的来说,处理dll动态链接库和C++依赖库缺失问题需要对系统组件有深入的理解,并且要有耐心和细心去排查每一个可能导致问题的原因。使用专门的修复工具可以简化这个过程,但同时也需要注意工具的来源,确保其安全...

    将现有的C++类转换成dll动态链接库

    ### 将现有的C++类转换成DLL动态链接库 #### 一、DLL的类型与选择 在考虑将现有的C++类转换成DLL时,首先需要理解不同类型的DLL及其适用场景。 1. **Win32DLL** Win32DLL指的是不使用MFC类库创建的DLL。这类DLL...

    C++编写DLL动态链接库的步骤与实现方法

    本文实例讲述了C++编写DLL动态链接库的步骤与实现方法。分享给大家供大家参考,具体如下: 在写C++程序时,时常需要将一个class写成DLL,供客户端程序调用。这样的DLL可以导出整个class,也可以导出这个class的某个...

    dll动态链接库方法查看工具.zip

    本工具——"dll动态链接库方法查看工具",专门针对C/C++/C#编程语言中的dll文件,提供了一个方便快捷的方法查看功能,帮助开发者更好地理解和使用dll文件。 一、dll动态链接库的原理与作用 DLL文件实质上是一段可...

    VS生成C++动态链接库DLL

    下面我们将详细探讨如何在VS中创建和使用C++动态链接库。 1. **创建DLL项目** - 打开Visual Studio,选择“创建新项目”。 - 在项目模板中,选择“Win32控制台应用程序”。 - 在“应用程序设置”对话框中,确保...

    C++无法加载dll动态库

    "C++无法加载dll动态库"的问题通常涉及到几个关键因素,包括但不限于:依赖项缺失、错误的版本匹配、路径问题或者系统环境设置不正确。下面我们将详细探讨这些方面。 1. **依赖项缺失**:DLL文件可能依赖于其他DLL...

    c++ 创建动态链接库dll并调用

    - 在Visual Studio或其他C++编译环境中,新建一个Win32项目,选择“动态库(DLL)”作为项目类型。 - 定义接口:在DLL项目中,你需要创建一个头文件(如`mydll_api.h`),声明将暴露给外部程序的函数和类。使用`__...

    立象条码打印最新dll动态链接库4.04

    立象条码打印最新dll动态链接库4.04是一款专为条码打印设计的软件组件,它在IT行业中扮演着重要角色,特别是在自动化生产和物流管理领域。DLL(Dynamic Link Library)是Windows操作系统中的一种共享库,它封装了一...

    Dll2C.zip_Dll2C_Dll2Cxx_c++ Dll2C_c++反编译工具_动态链接库

    《Dll2C.zip:探索C++动态链接库的反编译技术》 在软件开发过程中,动态链接库(DLL)是一种常见的代码复用机制,它允许多个程序共享同一段代码,从而节省内存并提高效率。然而,对于逆向工程和软件分析而言,理解...

    DLL动态链接库嵌入exe可执行文件

    标题“DLL动态链接库嵌入exe可执行文件”所涉及的知识点主要集中在动态链接库(DLL)与可执行文件(EXE)之间的嵌入技术。动态链接库是一种实现共享函数库的方式,它允许程序中只存放必要的代码部分,在运行时才被加载,...

    C#调用C++DLL动态库.rar_C#调用C++DLL动态库_c++dll动态库_c++开发动态库

    本主题关注的是如何在C#环境下调用由C++编写的DLL动态链接库,实现两者之间的交互。以下将详细解释这个过程的关键知识点。 1. **C#与C++互操作性**: C#(C Sharp)是.NET Framework的一部分,它是一种面向对象的...

    java调用C++动态链接库dll接口

    本项目涉及的"java调用C++动态链接库dll接口"是解决这种跨语言交互问题的一种方法,主要利用了Java Native Interface(JNA)这一技术。 JNA是Java平台的标准库,它允许Java代码直接调用本机库(如DLL或.so文件)的...

    深入浅出Visual_C++动态链接库(Dll)编程.pdf

    - **非MFC动态库**:这类DLL不依赖于MFC类库,导出的接口为标准C接口,可以被非MFC或MFC程序调用。 - **MFC规则DLL**:此类DLL包含一个继承自`CWinApp`的类,但没有消息循环机制。它主要用于提供与MFC应用程序相...

    在Visual Studio中用C++语言创建DLL动态链接库图文教程

    主要介绍了在Visual Studio中用C++语言创建DLL动态链接库图文教程,本文详细讲解了DLL库的创建过程,并给出了代码示例,需要的朋友可以参考下

    qt5_dll动态链接库合集

    动态链接库(DLL)是Windows操作系统中的一个重要概念,它将共享代码和资源存储在单独的文件中,多个程序可以同时调用这些共享资源,以减少内存占用和提高系统效率。 "qt5_dll"标签明确指出这个压缩包包含的是与Qt5...

Global site tag (gtag.js) - Google Analytics