关于win32 dll 的相关知识总结

1. 关于dll 访问路径问题

先是查system 下是否有DLL ,然后再查当前工程目录 或者用VB 调用时直接使用绝对路径。

2. 关于vb 调用VC DLL 接口问题的阐述

法一:

DLL 导出函数定义 

extern "C" double _stdcall  GetDistance(LPCSTR strGPS1,LPCSTR strGPS2)

{

   函数体

}

说明 extern "C" 兼容C 语言,_stdcall WINAPI 调用规约 适用于VB 其中需要注意的是 关于接口参数字符串类型的兼容性问题,由于VB 采用的WINAPI 的,所以在VC++ 编写DLL 时,对字符型的参数需要用LPCSTR 定义,否则用VB 调用时会出错。

接下来编译 *.def 文件

   LIBRARY GpsLocating

EXPORTS

GetDistance

   主要作用就是:定义需要导出的函数

Vb 中的调用写法:

   Declare + Function( 如果无返回值用sub)+ lib + 路径 + (参数)as + 返回类型。

实例:

Private Declare Function GetDistance Lib "G:/GPS 测距/GPStest(VB)/GpsLocating.dll"(ByVal strGPS1 As String, ByVal strGPS2 As String) As Double

法二:

   采用_declspec(dllexport) 方式,并不是和VB 调用,不作细讲。

 

3. 关于VC++ 加载DLL 的问题

简单做法:只需在link 中填写*.lib ,然后加入此Dll 的头文件,即可

(1). 静态导入

      #pragma comment(lib,"*.lib")
      extern +
函数;/ 或者 _declspec(dllimport) + 函数

(2). 动态导入

     HINSTANCE hDll;

     hDll = LoadLibrary("*.dll");  // 动态加载DLL

     typedef 函数类型 (*ADDPROC)( 函数参数) // 定义函数指针类型

     ADDPROC Add = (ADDPROC)GetProcAddress(hDll," 函数名")// 获取DLL 导出函数 此时导出函数就是Add

     FreeLibrary("*dll"); // 释放DLL

例子:在dll1.dll 中有add 函数

     HINSTANCE hDll;

     hDll = LoadLibrary("Dll1.dll");  // 动态加载DLL

     typedef int (*ADDPROC)(int a,int b) // 定义函数指针类型

     ADDPROC Add = (ADDPROC)GetProcAddress(hDll,"add")// 获取DLL 导出函数 此时导出函数就是Add

     FreeLibrary("Dll1.dll"); // 释放DLL

两种导入方式的对比:

静态导入:自动加载dll ,自动释放DLL ,不过整个工程都会加载这dll ,会找出内存浪费

动态导入:按照 LoadLibrary+GetProcAddress+FreeLibrary 模式动态加载,灵活,有需要时才加载。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值