从 MinGW 调用 MSVC DLL 函数

Posted

技术标签:

【中文标题】从 MinGW 调用 MSVC DLL 函数【英文标题】:Call function from MSVC DLL from MinGW 【发布时间】:2013-01-23 05:55:10 【问题描述】:

我正在尝试将 DLL(使用 MSVC 编译)与 MinGW 编译器一起使用。 dll 和二进制文件都使用用相应编译器编译的 opencv dll(MSVC 用于 MSVC DLL,MinGW 用于 MinGW 二进制文件)。但是,opencv vesrion 是相同的 2.42。

我可以成功加载我的 DLL(使用 extern C),但从 DLL 调用 SetRect 函数会导致以下控制台输出:

Set search rect(qt): 162, 119, 50, 50
(Internal error: pc 0x112 in read in psymtab, but not in symtab.)
(Internal error: pc 0x112 in read in psymtab, but not in symtab.)
(Internal error: pc 0x112 in read in psymtab, but not in symtab.)
(Internal error: pc 0x112 in read in psymtab, but not in symtab.)
Set search rect(dll): 2282800, 2282908, 2282840, 1874777202
(Internal error: pc 0x112 in read in psymtab, but not in symtab.)
(Internal error: pc 0x112 in read in psymtab, but not in symtab.)
(Internal error: pc 0x112 in read in psymtab, but not in symtab.)
(Internal error: pc 0x112 in read in psymtab, but not in symtab.)

为什么数字不同,内部错误是什么以及如何解决?

一些代码,注意Rect类来自Opencv。

MinGW 二进制文件:

std::cout << "Rect(qt): " << rect.x << ", " << rect.y << ", " << rect.width << ", " << rect.height << "\n" << std::flush;
SetRect(rect);

MSVC DLL:

void SetRect(Rect rect)

    std::cout << ""Rect(dll): " << rect.x << ", " << rect.y << ", " << rect.width << ", " << rect.height << "\n" << std::flush;

谢谢。

【问题讨论】:

【参考方案1】:

除非您提供Short, Self Contained, Correct (Compilable), Example,否则我们将无法重现您的问题。

我建议您仔细查看 MinGW 常见问题解答,特别是 MSVC and MinGW DLLs 部分,因为它涵盖了 what you are trying to accomplish。

【讨论】:

以上是关于从 MinGW 调用 MSVC DLL 函数的主要内容,如果未能解决你的问题,请参考以下文章

cmake:让mingw(gcc)生成MSVC可用的dll(.lib)----mark亲测有效

从 C++ 调用 C# dll(MSVC 编译器)

Qt Creator调用VS2008生成的DLL注意事项 good

如何从 MSVC 中的 libsndfile-1.dll 访问函数?

从 DLL 函数调用非 DLL 函数

调用特定 DLL 中的函数时 CEF 崩溃