本帖最后由 鹰眼(流星) 于 2023-1-16 23:49 编辑
链接动态库是各大语言之间互相调用的重要操作,本身上也有许多不可或缺的功能——C程序对C动态库的调用并不是无意义的,如果说程序是一艘航母,那么动态库就是航母上的各类飞机。切入正题,关于(某种方式)C链接由C编译的动态库所存在哪些问题呢?
- #include <stdio.h>
- #include <stdlib.h>
- #include <windows.h>
复制代码 标红部分为引用的头文件,用于链接动态库的函数出自stdlib.h头文件中,应该有不少人在用。
接下来的为DLL动态库C部分源代码(1)与主程序与动态库有密切联系的代码(2):
(1)
a += b;
printf("%d", a);
return 0;
(2)
printf("%d", the_ondy(1,1));
红色部分为使用动态链接的函数。
由于某个问题的影响,该部分代码有监控程序的进度,接下来有两种情况:
1.控制台错误显示结果,则证明连接时变量a,b的数据发生错误,可解决;
2.控制台未显示结果,则证明未成功链接动态库,须另寻他方;
3.控制台只显示一次结果,则证明返回值未被主程序接收,可解决。
见图片:
结果为第三种情况,证明返回值未被主程序接收!!!
解决方法:
将返回值那行代码替换,并将函数切换为void类型:
- void ondy(int a, int b){
- a += b;
- printf("%d", a);
- FILE *fp = fopen(".\\Z001", "wb+");
- fwrite(&a, sizeof(int), 1, fp);
- rewind(fp);
- fclose(fp);
复制代码 将主程序使用动态链接的部分(上方展示过)替换为:
the_ondy(1, 1);
FILE *fp = fopen(".\\z001", "rb+");
int n;
rewind(fp);
fread(&n, sizeof(int), 1, fp);
printf("%d", n);
fclose(fp);
运行结果:
将文件作为中转站进行传输,虽然解决了问题但麻烦了许多,如果大家有更好的方案,希望大家一起分享。
|
麻烦红盟的开发团队看一下,使用“插入代码”功能会导致乱码。
使用道具 举报
我QQ号被盗了手机号被改了QQ钱包也被注销了,能不能帮我找回来,找不回也没关系,谢谢你们了
使用道具