VC编写DLL几种方法的简介.

23 篇文章 0 订阅

可欣

动态连接库最大的特点就是能节省磁盘空间.当多个进程共享同一个DLL的时候,内存中只有一个DLL的代码.通过映射来使各个进程得以调用.

1.用VC建立一个WIN32 DLL

我们利用VC编写DLL有几种方法.如果用VC建立一个WIN32 DLL 工程.那这个工程就应该只导出C++的类或全局变量.和全局函数.方法就是在CPP文件中编写你的代码,为每个需要导出的元素进行导出办法是增加如下语句:

_declspec(dllexport)

你当然可以把它定义成宏

例如,如果是一个类STUDENT需要导出, 那么声明时应该是这样写 class _declspec{dllexport) student;

当然也可以定义时直接导出.

我们的客户端,也就是我们调用该函数的客户程序,就需要导入这个类或者函数..

填写如下语句:

class _declspec(dllimport) student

{

}  // 声明

之后就可以利用STUDENT来构造对象,也可以调用它的成员函数..了

记住,一定要把工程的连接设置好.要把生成的LIB文件填写好,因为客户程序要想加载DLL,能够准确的调用各个DLL中的函数,都是靠这个LIB文件哪.包括函数的地址等等.

当然也可以显示连接

利用LOADLIBRARY

原型是

HMODULE LoadLibrary( LPCTSTR );

返回的HMODULE就是一个DLL句柄.

所以我们在利用这个句柄来作为参数调用另一个函数GETPROCADDRESS

FARPROC GetProcAddress( HMODULE  , LPCSTR);  //如果利用序号来索引,那么要加上MAKEINTERSOURCE宏

返回一个函数指针,利用它来调用函数,

LPCSTR是函数名,但你应该利用DUMPBIN来查看一下你导出的函数名,因为C++编译器支持重载,它会以自己的方式重命名.除非你用extern "C"

用C语言的方式来命名函数.例如 一个函数 void fun();

导出格式应该是 extern "C" _declspec(dllexport) void fun();   //如果是声明导入函数,直接写原型,如果是声明类,那么一定要是类的头文件声明,包含了成员函数和数据成员的.

注意即使是采用了C语言命名方式 如果你改变了调用方式_stdcall 那么还是会改变函数命名的,除非你利用DEF文件来导出.

EXPORTS

fun

这样是可以的.

2.建立一个MFC扩展DLL

扩展DLL是为了更好的支持MFC的类.你建立这个工程后会自动生成一些代码,不要管它先,你把你要动态连接的CPP和相应的.H文件加入到工程,在.CPP文件中需要导出的类上加上AFX_EXT_Class 在.H需要导入的类上加上同样的代码,这样就可以了.

例如class AFX_EXT_CLASS CSTUDENT : public CPERSON   //.CPP

{

}

class AFX_EXT_CLASS CSTUDENT ; //.H

{

}   //声明

3.建立一个常规的DLL

如果你要建立扩展的DLL,那么其他的IDE是无法利用的,因为每个编译器的命名方式是不同的.

如果你想使其他IDE来调用VC的DLL,那么就建立一个常规的DLL.

建立工程以后,编写你要导出的类.例如

extern "C" _declspec(dllexport) void fun()

{

    AFX_MANAGE_STATE(AfxGetStaticModuleState( ));

}

在为每一个需要导出的函数的开头加上这条语句.

在客户端要加上导入语句就可以了.

 

 

转帖请注明地址

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
最简单的dll并不比c的helloworld难,只要一个DllMain函数即可,包含objbase.h头文件(支持COM技术的一个头文件)。若你觉得这个头文件名字难记,那么用windows.H也可以。源代码如下:dll_nolib.cpp #include #include BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, void* lpReserved) { HANDLE g_hModule; switch(dwReason) { case DLL_PROCESS_ATTACH: cout<<"Dll is attached!"<<endl; g_hModule = (HINSTANCE)hModule; break; case DLL_PROCESS_DETACH: cout<<"Dll is detached!"<<endl; g_hModule=NULL; break; } return true; } 其中DllMain是每个dll的入口函数,如同c的main函数一样。DllMain带有三个参数,hModule表示本dll的实例句柄(听不懂就不理它,写过windows程序的自然懂),dwReason表示dll当前所处的状态,例如DLL_PROCESS_ATTACH表示dll刚刚被加载到一个进程中,DLL_PROCESS_DETACH表示dll刚刚从一个进程中卸载。当然还有表示加载到线程中和从线程中卸载的状态,这里省略。最后一个参数是一个保留参数(目前和dll的一些状态相关,但是很少使用)。 从上面的程序可以看出,当dll被加载到一个进程中时,dll打印"Dll is attached!"语句;当dll从进程中卸载时,打印"Dll is detached!"语句。 编译dll需要以下两条命令: cl /c dll_nolib.cpp 这条命令会将cpp编译为obj文件,若不使用/c参数则cl还会试图继续将obj链接为exe,但是这里是一个dll,没有main函数,因此会报错。不要紧,继续使用链接命令。 Link /dll dll_nolib.obj 这条命令会生成dll_nolib.dll。 注意,因为编译命令比较简单,所以本文不讨论nmake,有兴趣的可以使用nmake,或者写个bat批处理来编译链接dll。 加载DLL(显式调用)
### 回答1: vc6 dm.dll 是 Microsoft Visual C++ 6.0 开发环境提供的一个动态链接库文件,在一些编写使用VC++ 6.0的程序中可能会用到。该文件主要包含了一些在VC++ 6.0开发环境中常用的函数和类的定义,供程序调用和使用。 要下载 vc6 dm.dll,可以通过以下步骤进行: 1. 进入一个可靠的软件下载网站,如官方或受信任的第三方软件库网站。 2. 在搜索框中输入 "vc6 dm.dll",然后按下回车键。 3. 在搜索结果中找到适合您系统版本和需求的版本,然后点击下载。 4. 根据下载网站的提示,选择保存文件的位置,并等待下载完成。 tlloc.dll 是一个未知的 DLL 文件,如果你是根据自己的需求而寻找该文件下载的,建议先了解该 DLL 文件的用途和来源,确保其安全性和合法性。通常来说,为了确保从可靠的来源下载 DLL 文件,可以按照以下步骤进行操作: 1. 确认需要该 DLL 文件的确切名称以及与之关联的软件或服务。 2. 在官方厂商网站、软件开发者的官方网站或受信任的第三方软件库网站上搜索该 DLL 文件。 3. 在搜索结果中找到与您的需求最相符的版本,然后点击下载。 4. 根据下载网站的提示,选择保存文件的位置,并等待下载完成。 请记住,在下载任何 DLL 文件时,要确保从可靠的来源获得,并且在下载和使用之前,最好对其进行杀毒扫描以确保其安全。此外,应避免从不受信任的来源直接下载 DLL 文件,以免带来潜在的风险和安全问题。 ### 回答2: VC6 dm.dll和tlloc.dll是Visual C++ 6.0的两个动态链接库文件。它们主要用于支持和提供某些语言环境下的本地化功能。 VC6 dm.dll是Visual C++ 6.0的资源管理库,它负责处理和管理应用程序的资源文件,如可执行文件、动态链接库和静态链接库等。它提供了资源的加载、卸载、修改等功能,使得开发人员可以更加方便地对资源进行操作和管理。 VC6 tlloc.dll是Visual C++ 6.0的本地化库,它提供了多语言环境下的本地化支持。它包含了各种语言的本地化资源文件,如文字、图片、声音等,以便应用程序可以根据系统或用户的语言环境自动选择并加载相应的本地化资源,从而实现程序的国际化和本地化。 要下载VC6 dm.dll和tlloc.dll,可以在互联网上搜索相关的资源下载网站或开发人员社区。在这些网站或社区中,可以找到相应版本的库文件,并进行下载和安装。下载后,将这两个dll文件复制到你的应用程序所在的目录下,或者将它们添加到系统的dll搜索路径中。然后,你的应用程序就可以正常使用这两个库文件提供的功能了。 需要注意的是,下载dll文件时要选择可靠的来源,并确保下载的dll文件与你的开发环境的版本相匹配。否则,可能会导致兼容性问题或安全隐患。因此,建议在下载和使用dll文件前,仔细验证其来源和版本的兼容性,以确保应用程序的正常运行。 ### 回答3: VC6 dm.dll 和 tlloc.dll 是一些动态链接库文件,通常与VC6(Visual C++ 6.0)编译器相关联。 VC6 dm.dll是一个用于调试管理器(Debug Manager)的动态链接库文件,它提供了与调试相关的函数和接口,用于支持在VC6中进行代码调试和错误追踪。当你在使用VC6进行编程时,可能会遇到需要使用dm.dll的情况。你可以在一些第三方软件下载站或者开发者社区中找到并下载该文件。 TLLOC.DLL是TLLOC(Type Library Local)的缩写,是一个类型库本地化工具的动态链接库文件,用于支持VC6程序中的本地化过程。本地化是指将一个程序适应特定语言、地区或文化的过程,将程序中的文本、资源和用户界面翻译成多种语言或进行相关调整。TLLOC.dll提供了一些函数和接口,用于在VC6中处理本地化相关的任务。你也可以在一些提供VC6开发资源的网站上下载该文件。 请注意,下载并使用这些动态链接库文件时,请确保从可信来源下载,以避免从不可信的网站下载到带有恶意软件的文件。此外,建议根据你的具体需要,咨询相关的开发者社区或者参考相关的文档,以确保正确地使用这些文件并避免出现任何问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值