C++ win32生成DLL文件供其他程序调用该怎么生成求步骤

C++ win32生成DLL文件供其他程序调用该怎么生成求步骤,第1张

如果你使用的是VISUAL STUDIO

1、从“文件”菜单中,选择“新建”,然后选择“项目…”。

2、从“项目类型”窗格中选择“Visual C++”下的“Win32”。

3、从“模板”窗格中,选择“Win32 控制台应用程序”。

4、为项目选择一个名称,如“MathFuncsDll”,并将其输入“名称”字段。为解决方案选择一个名称,如“DynamicLibrary”,并将其输入“解决方案名称”字段。

5、按“确定”启动 Win32 应用程序向导。在“Win32 应用程序向导”对话框的“概述”页中,按“下一步”。

6、从“Win32 应用程序向导”中的“应用程序设置”页中,选择“应用程序类型”下的“DLL”(如果可用),或者选择“控制台应用程序”(如果“DLL”不可用)。某些版本的 Visual Studio 不支持使用向导创建 DLL 项目。您可以稍后对此进行更改,以将项目编译为 DLL。

7、从“Win32 应用程序向导”的“应用程序设置”页中,选择“附加选项”下的“空项目”。

VC60下

1、编写非MFC的DLL库

(1) VC60下建立Win32 Dynalmic-Link Library工程mydll。

(2)工程下创建一个mydllh头文件和mydllcpp实现文件。

mydllh头文件如下:

#ifndef MYDLL_H#define MYDLL_H

#ifdef DLL#define EXTERN extern "C" _declspec(dllexport)#else#define EXTERN extern "C" _declspec(dllimport)#endif

EXTERN int myadd(int, int);

#endif

mydllcpp实现文件如下:

#define DLL#include "mydllh"

int myadd(int a, int b){ return a+b;}

(3)编译生成DLL动态库mydlldll

2、创建一个调用DLL库的应用程序testapp

(1)在VC60下建立Win32 Console Application工程,在下一步选择简单应用程序。

(2)修改testappcpp文件,实现调用mydlldll动态库中的函数myadd。实现如下:

#include "stdafxh"#include <stdioh>#include <windowsh>typedef int (padd)(int, int);

int main(int argc, char argv[]){ HINSTANCE handle = ::LoadLibrary("//mydll/debug/mydlldll");//mydlldll动态库路径 if(handle != NULL) { padd pf = (padd)GetProcAddress(handle,"myadd"); if(pf != NULL) { printf("dll myadd(3,2) = %d", pf(3,2)); }

::FreeLibrary(handle);

} return 0;}

(3)编译生成exe应用程序testappexe。

(4)运行testappexe,结果如下:

dll myadd(3,2) = 5

VB6先创建一个ActiveX DLL 工程 TestDll

在里面加上下面的代码

Function Test(str As String) As Boolean

Test = True

MsgBox str

End Function

编译成activex dll即可

这个dll不是基于C++的标准动态链接库,但却是应用开发效率很高的activeX dll,此控件可以被MFC、Delphi、网页上的javascript和vbscript、vc++所调用和使用。

你可以自己用着试试,工程菜单里点引用,用法与其它语言编的activeX dll用法相同。然后写

TestDllTest "hello world!"

或者

Dim a As TestDll

set a = New TestDll

aTest "hello world!"

所以楼上说VB6做不到是很不负责任的,毕竟VB在14年以前1996年就能做此事了。尤其现在几乎所有语言都是写面向对象的程序,像vb这种类似activex组件式的程序已被广泛用于C#、VBNet等。 而标准dll只不过是面向结构化编程的函数库,属于上一代理念或底层开发的使用了。

我说的方法有两个优点,第一、简单(与写程序相比,这简单多了),第二、灵活(我说的这两个方法可以随时跟据需要修改,但程序不行,你需要重写编译后才能用。)

第一个方法(如果不想让别人看到命令行,就加入echooff):1、先新建一个文件夹,把你要用的所有DLL文件放入这个文件侠。

2、用记事本输入以下格式命令:

copy

XXXdll

c:\windows\system32\XXXdll(以下方法是把一个XXXdll的文件复制到c:\windows\system32\)

3、每行一条命令(太多的话,可以新建文件夹分类后,用号代替文件名来 *** 作),保存文件为"setupbat"

(保存时注意加上英文双引号),放入你新建存放DLL文件的文件夹中。

第二种方法:

把你所要用的DLL文件压缩到一个WIINRAR包里(压缩时注意设置解压路径),这样解压后,就会在指定目录里。

1 对 A 新增一个节区 section 当成一个资源节区储存 C

2 更改 entry point 或是 inline hook A程序的进入点

3 写个初始化 code, 将新增的节区其内容还原到系统可以读到 dll 的地方,

再跳到步骤 2 的原来的 entry point 或是 inline hook A程序的进入点

需要了解 PE format 与 code 插入(病毒感染)

运行另一个程序的话,有很多办法,比如 ShellExecute,WinExec,CreateProcess 等

调用另一个 dll,有静态调用和动态调用两种

静态调用就是在代码里 include 头文件,包含函数定义,并且链接 dll 的 lib 文件,然后直接使用即可,编译器会自动链接这个 dll,但是如果 dll 找不到,那么程序会无法启动

所以对于不确定 dll 是否可以正常使用时,需要使用动态调用

首先需要使用 LoadLibrary 函数

HMODULE WINAPI LoadLibrary(

  _In_  LPCTSTR lpFileName

);

成功载入 dll 之后,再使用 GetProcAddress 函数获取 要使用的函数的地址

FARPROC WINAPI GetProcAddress(

  _In_  HMODULE hModule,

  _In_  LPCSTR lpProcName

);

然后就可以使用了,不需要的时候可以使用 FreeLibrary 释放 dll 内存

BOOL WINAPI FreeLibrary(

  _In_  HMODULE hModule

);

下面死是 MSDN 给出的例子作为参考

// A simple program that uses LoadLibrary and 

// GetProcAddress to access myPuts from Myputsdll 

 

#include <windowsh> 

#include <stdioh> 

 

typedef int (__cdecl MYPROC)(LPWSTR); 

 

int main( void ) 

    HINSTANCE hinstLib; 

    MYPROC ProcAdd; 

    BOOL fFreeResult, fRunTimeLinkSuccess = FALSE; 

 

    // Get a handle to the DLL module

    hinstLib = LoadLibrary(TEXT("MyPutsdll")); 

 

    // If the handle is valid, try to get the function address

    if (hinstLib != NULL) 

    { 

        ProcAdd = (MYPROC) GetProcAddress(hinstLib, "myPuts"); 

 

        // If the function address is valid, call the function

        if (NULL != ProcAdd) 

        {

            fRunTimeLinkSuccess = TRUE;

            (ProcAdd) (L"Message sent to the DLL function\n"); 

        }

        // Free the DLL module

        fFreeResult = FreeLibrary(hinstLib); 

    }

    // If unable to call the DLL function, use an alternative

    if (! fRunTimeLinkSuccess) 

        printf("Message printed from executable\n");

    return 0;

}

1、第一步,打开一个程序的安装目录,在这里面可以看到一些dll的一些文件

2、第二步,右边有一个更多,点击一下“更多”,可以看到它的默认安装路径,如果不需要更改的话,它就会默认的安装到c盘的程序文件夹中。

3、第三步,点击安装之后,在它d出的面板中有一个自动汉化的说明,我们点击“已阅”。

4、第四步,接着在它的安装过程中会出现一个安装类型,可以根据需要选择一个安装类型,这里就选择它默认的“典型安装”,然后点击:下一步。

5、第五步,当安装到汉化的安装目录的时候它会提示,如果是不想把它安装到默认位置的话,可以在点击浏览选择一个安装的文件位置,这里就还是以它的默认的c盘中的program files\exescope的文件夹里。

6、第六步,可以看到它上面的提示它的汉化版已安装完成,这时点击关闭。

7、第七步,在dll的文件上点击右键,就可以看到右键的下拉菜单中可以看到它的程序右键菜单。

8、第八步,用右键菜单中的exescope,点击要打开的dll文件时,会出现一个提示:拒绝写入,这里只读模式打开,这时点击确定。

9、第九步,点击确定之后,就可以在它打开的面板中看到一些这样的文字,头部、导出、导入和资源,如果点击它前面的+号可以查看到它所包含的不同内容。

10、第十步,点击不同的dll文件时,可以看到它里面的内容也是不同的。

11、第十一步,当想要把所要的位图或者图标导出到一个文件夹的时候要在文件菜单中选择导出,选择一个存储的位置,可以看到它如果是图标的话,默认的存储就会是图标文件的后缀名,存储之后可以对其做一些修改。

以上就是关于C++ win32生成DLL文件供其他程序调用该怎么生成求步骤全部的内容,包括:C++ win32生成DLL文件供其他程序调用该怎么生成求步骤、如何用VB6写一个DLL文件,供其他程序调用谢谢@!、如何用E语言写一个程序把指定DLL文件放入指定目录等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9757367.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存