繁体   English   中英

使用带有外部 dll 的 c++ 构建器应用程序

[英]Using a c++ builder application with an external dll

我正在尝试在我的 c++ 构建器应用程序中使用external dll The dll (let.s call it X.dll) was created with Qt Creator (using MingW 32 bit compiler, tried gcc as well ) and consists of a single functon to keep things simple (besides X.dll, an import library Xa is也创建)。

dll header (Dll_lib.h) 基本上只是

__declspec(dllexport)  Dll_method(float *p, int n);

如果我创建一个简单的 Qt 应用程序,添加 dll header 并将其链接到 Z06416233FE,everythinkEC4C5913312

但是,当我尝试在我的 c++ 构建器应用程序中使用 dll 时,我收到“未解析的外部 _Dll_method 引用自... ”错误。

我的 c++ 构建器应用程序中引用 dll 的部分看起来像

#include "lib\Dll_lib.h"

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

__declspec(dllimport)  Dll_method(float *p, int n);

.....

X.lib 是使用与 c++ 构建器捆绑在一起的 implib 工具直接从 dll 创建的。 我还尝试使用 coff2omf 工具从 Xa 创建 X.lib,但没有任何效果,而且我总是收到相同的错误消息。

C++ 环境有名称重载的习惯,以支持重载,不同的 arguments 具有相同的名称,例如:

int use(int x, char y); // mangles to something like use__Int__Chr.
int use(double x);      // mangles to something like use__Dbl.

这允许根据 arguments 链接正确的一个。

您可能需要将其包装在extern "C"中以使其不破坏名称,例如:

extern "C" {
    __declspec(dllimport)  Dll_method(float *p, int n);
}

这是假设您在没有名称修改的情况下创建它,并从假设它修改的东西中使用它。 如果它在两边都被破坏了,您可能必须使用extern "C"创建使用它,因为不能保证不同的编译器会使用相同的规则进行破坏。


顺便说一句,您应该能够检查由您的工具链创建的 object 文件或 DLL,以确定 function 在其定义的位置被称为什么以及调用者期望它是什么。 在 Linux 下,我会使用类似nm的东西,我不确定 Windows 的等价物是什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM