Windows开发——DLL 文件导出和使用

动态链接库英文为DLL,是Dynamic Link Library的缩写。DLL是一个包含可由多个程序,同时使用的代码和数据的库。通过使用 DLL,程序可以实现模块化,由相对独立的组件组成。

 

.c/.cpp 分别表示c语言和c++导出的dll文件方式。

一、.c导出给.c使用:

******************dll文件的头文件*******************

_declspec(dllexport) int add1(int a, int b);


_declspec(dllexport) double add2(double a, double b);


_declspec(dllexport) int add3(char* str1,int size, char* str2);

********************测试项目-使用文件(静态)***********************

#pragma comment(lib,"Calculater.lib")

********************测试项目-使用文件(动态)**********************

typedef int (*add1)(int a, int b);

typedef double (*add2)(double a, double b);

typedef int (*add3)(char *str, int len,char *st2 );


HMODULE hMoudle = GetModuleHandle("Calculater.dll");

hMoudle = LoadLibrary("Calculater.dll");

add1 fn1 = (add1)GetProcAddress(hMoudle, "add1");

int a1 = 10;

int b1 = 20;

printf("add1 : %d\n", fn1(a1, b1));

add2 fn2 = (add2)GetProcAddress(hMoudle, "add2");

add3 fn3 = (add3)GetProcAddress(hMoudle, "add3");


//FreeLibrary(hMoudle);

***********************************************************************

动态相比静态只是不需要加载.lib文件。

静态:.lib 、.dll

动态:.dll、API 添加lib文件。

***********************************************************************

二、.c导出给.cpp使用

******************dll文件的头文件*******************

extern "C"

{

_declspec(dllexport) int add1(int a, int b);



_declspec(dllexport) double add2(double a, double b);



_declspec(dllexport) int add3(char* str1, int size, char* str2);

}

***********************测试项目-使用文件**************************

没问题

 

三、.cpp导出给.cpp使用

静态无问题✔

动态需要调整✖

只需要在调用函数名出添加参数。

 

add1 fn1 = (add1)GetProcAddress(hMoudle, "?add1@@YAHHH@Z");

即可。原因:c++导出的dll文件是带有一个参数的,缺少参数编译器无法找到。

 

四、导出dll

类前添加关键字即可:

class __declspec(dllexport) Student {};

 

五、__cdecl和__stdcall区别

__cdecl使用对函数名无影响

__stdcall有影响

用在函数声明 类型之后 函数名之前

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LionelMessi7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值