通过DLL导出类指针来传递及使用对象

DLL开发是windows编程中经常用到的一种技术。从DLL中可以导出函数、变量、还有类。这个通过VS的win32应用程序向导生成一个win32DLL(附加选项选中【导出符号】),生成的代码有相应示例。但是,在实际开发过程中,我们会发现从DLL中导出类是件不太靠谱的事情。原因可能是DLL和调用DLL的应用程序是用不同编译器或者编译器的不同版本,也可能是DLL和应用程序使用的内存堆不一样。总之,使用DLL传递对象不是一件稳定的事情。

再说,我们也没见过Win32API和COM接口直接传递对象出来不是?我们能确定可以稳定传递的只有基本数据类型。

但是有时候,我们又需要直接使用DLL里面的对象,怎么办?这中情况下,可以进行一些转换,通过传递指针的方式来使用DLL里的对象。毕竟指针也是基本数据类型。这也是COM接口传递对象的方式。接口的具体实现也有不同的方式,这里就来举个例,实现一种。

首先,在任意现有的解决方案中添加一个WIN32 DLL项目。项目名称就叫w3 。如图1、图2。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DLL(Dynamic Link Library,动态链接库)是一种可重用的代码库,可以在不同的程序中使用DLL可提供应用程序所需的函数和数据,从而降低了应用程序的大小,也方便了程序员的开发。 一般来说,DLL可分为两:系统 DLL 和应用程序 DLL。系统 DLL 是由 Windows 操作系统提供的,而应用程序 DLL 则是由开发人员编写的,用于特定应用程序的功能。 使用 DLL,需要以下步骤: 1. 创建 DLL 可以使用 Visual Studio 等开发工具创建 DLL 项目,编写 DLL 的代码并编译生成 DLL 文件。 2. 导出函数DLL 中,需要将需要被其他程序调用的函数导出。可以使用 __declspec(dllexport) 标记来实现。 例如: ```c++ __declspec(dllexport) int Add(int a, int b) { return a + b; } ``` 3. 使用 DLL 在应用程序中,需要使用 LoadLibrary 函数来加载 DLL,并使用 GetProcAddress 函数获取需要调用的函数地址。 例如: ```c++ #include <windows.h> #include <iostream> typedef int (*AddFunc)(int, int); int main() { HMODULE hDll = LoadLibrary("MyDll.dll"); if (hDll == NULL) { std::cout << "Failed to load DLL!" << std::endl; return -1; } AddFunc pAdd = (AddFunc)GetProcAddress(hDll, "Add"); if (pAdd == NULL) { std::cout << "Failed to get function address!" << std::endl; return -1; } int result = pAdd(1, 2); std::cout << "Result: " << result << std::endl; FreeLibrary(hDll); return 0; } ``` 以上就是 DLL使用方法的简单介绍。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值