吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2142|回复: 9
收起左侧

[已解决] gcc动态调用dll文件的问题

[复制链接]
seeyou_shj 发表于 2019-9-30 18:11
本帖最后由 seeyou_shj 于 2019-10-1 21:06 编辑

捉摸了一下午,没有头绪,请高手指点。

dll文件,名称为mydll.c,内容如下:
int dub(int x)
{
        return x*2;
}

用mingw自带的编译器编译为dll文件。得到以便依的dll文件mydll.dll:
gcc -shared mydll.dll -c mydll.c

做个主程序,调用该dll文件。文件名main.c,内容如下:
#include <stdio.h>
#include <windows.h>
typedef int (*INT_FUNC)(int);
int main()
{
        INT_FUNC db;
        HINSTANCE hInstLibrary = LoadLibrary(L"mydll.dll");
        
        db = (INT_FUNC)GetProcAddress(hInstLibrary,"dub");
        
        printf("hello,%d\n",db(33));
        FreeLibrary(hInstLibrary);
        
        return 0;
}
静态调用dll文件倒是可以,用gcc main.c mydll.dll就可以编译成功。问题是怎么实现动态调用该dll文件?

用gcc main.c编译后,运行,则提示dll文件的编译mydll.dll没有被指定在windows上运行……网上查了一下,说是因为该dll没有注册的原因。于是利用regsvr32注册该dll,提示可能与windows版本不兼容……

直接不知道该怎么做了。

请高手指点。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

天心阁下 发表于 2019-9-30 19:32
本帖最后由 天心阁下 于 2019-9-30 19:44 编辑

编译mydll命令应为
gcc -shared -o mydll.dll  mydll.c

mydll.dll和main.exe要在一个目录,不需要注册
mingw对宽字符支持性较差
SummerSui 发表于 2019-9-30 21:15
没有做过这些,以下话就当参考或者胡说八道。
我读你的程序,就是加载一个库,我觉得默认是系统库,或者是从系统路径中找库名,这是一种绝对位置寻找库;
可以改成相对位置寻找库,不然那么多程序,系统需要注册多少库。
本人在不了解的情况下一本正经的胡说,可以参考至于如何使用相对位置寻找库,不会
nj001 发表于 2019-9-30 22:43
 楼主| seeyou_shj 发表于 2019-10-1 09:04
天心阁下 发表于 2019-9-30 19:32
编译mydll命令应为
gcc -shared -o mydll.dll  mydll.c

是在同一个目录。

静态调用的话没问题,现在就是怎么实现动态调用?
 楼主| seeyou_shj 发表于 2019-10-1 09:05
nj001 发表于 2019-9-30 22:43
看看是不是32位和64位不兼容的问题

这个也注意到了,我的系统是64位,似乎不是这个问题。
天心阁下 发表于 2019-10-1 18:22
就按你的来,能实现
gcc -shared -o mydll.dll  mydll.c
HINSTANCE hInstLibrary = LoadLibrary(L"mydll.dll");

HINSTANCE hInstLibrary = LoadLibrary("mydll.dll");
gcc -o main.exe main.c
main

捕获.PNG
 楼主| seeyou_shj 发表于 2019-10-1 19:04
天心阁下 发表于 2019-10-1 18:22
就按你的来,能实现
gcc -shared -o mydll.dll  mydll.c
HINSTANCE hInstLibrary = LoadLibrary(L"mydll. ...

我继续测试了一下,还是出错。错误信息:
…\mydll.dll没有被指定在windows上运行,或者它包含错误,请尝试使用原始安装媒体重新安装程序,或联系您的系统管理员或软件供应商以获取支持。

请问你的gcc版本信息、windows版本信息如何?

我的运行环境为gcc版本是5.3.0,win7,64位。不知道是不是编译环境问题。
 楼主| seeyou_shj 发表于 2019-10-1 21:06
seeyou_shj 发表于 2019-10-1 19:04
我继续测试了一下,还是出错。错误信息:
…\mydll.dll没有被指定在windows上运行,或者它包含错误,请 ...

应该是编译环境问题。回头用个64位的gcc编译一下应该可以了。
 楼主| seeyou_shj 发表于 2019-11-15 10:26
时间太久都没人回复了。看来还是得自己努力,不能奢求外界帮助。得找本书认真看一看了。。。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 00:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表