Gcc 让DLL从其宿主应用程序调用函数

Gcc 让DLL从其宿主应用程序调用函数,gcc,dll,reference,mingw,undefined,Gcc,Dll,Reference,Mingw,Undefined,谁能告诉我如何从.dll中调用host.exe文件中的函数?我的意思是,比如,改变他们的角色。现在DLL将从其主机EXE调用函数 我这样做: 动态链接库: 函数midterms()和terminator()以及main()可在主机exe文件中找到 但是当我编译它的时候。我在命令提示符下遇到如下错误: >gcc -o midx.dll midx.o -s -shared -Wl,--subsystem,windows midx.o:midx.c:(.text+0x402): undefine

谁能告诉我如何从.dll中调用host.exe文件中的函数?我的意思是,比如,改变他们的角色。现在DLL将从其主机EXE调用函数

我这样做:

动态链接库:

函数midterms()和terminator()以及main()可在主机exe文件中找到

但是当我编译它的时候。我在命令提示符下遇到如下错误:

>gcc -o midx.dll midx.o -s -shared -Wl,--subsystem,windows
midx.o:midx.c:(.text+0x402): undefined reference to `midterms'
midx.o:midx.c:(.text+0x40e): undefined reference to `terminator'
midx.o:midx.c:(.text+0x490): undefined reference to `_imp__withdraw'
midx.o:midx.c:(.text+0x4a2): undefined reference to `_imp__deposit'
midx.o:midx.c:(.text+0x4ae): undefined reference to `_imp__ret_check'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: midx.o: bad reloc                      
address 0x20 in section `.eh_frame'
collect2.exe: error: ld returned 1 exit status
有人能帮我吗

结构:

DLLIMPORT float withdraw() {}
DLLIMPORT float deposit() {}
DLLIMPORT ret_check() {}
DLLIMPORT float mid_problem3() {}

这可以通过VisualStudio工具链实现。在构建EXE时,使链接器生成一个
lib
文件(使用
\uuu declspec(dllexport)
,并在构建DLL时向链接器提供该文件(清除要使用
\uu declspec(dllimport)导入的函数)
。对于gcc不知道,但是如果EXE生成了一个LIB,你应该将它交给DLL生成。另外:从DLL调用
main
似乎是一个非常糟糕的主意,但假设你知道你在做什么。@manuell我现在一切都好了。我没有调用存储在主机应用程序中的函数,而是让它们返回控件ol使用“return;”命令。此外,我还解决了函数ret_check()、draw()和deposit()的问题。我不必将它们声明为“导出”函数,因为它们位于同一个DLL中。这就解决了问题。
DLLIMPORT float withdraw() {}
DLLIMPORT float deposit() {}
DLLIMPORT ret_check() {}
DLLIMPORT float mid_problem3() {}