使用VS编译器在Qt中编译dll,以便在Borland中使用

Compile dll in Qt with VS compiler to use it in Borland

本文关键字:Borland 编译 VS 编译器 Qt 使用 dll      更新时间:2023-10-16

我有一个C函数包,我需要从中创建DLL库,可以在C++程序中使用。我以前没有做过任何图书馆,所以我在这方面完全是初学者。我在Qt Creator工作。

我的第一次尝试是根据手册创建共享库,所以我在项目文件中添加了这两行:

TEMPLATE = lib
DEFINES += MYLIB_LIBRARY

然后我创建了mylib.h文件

#ifndef MYLIB_H
#define MYLIB_H
#include "mylib_global.h"
#include "functions1.h"
#include "functions2.h"
#include "functions3.h"
class MYLIBSHARED_EXPORT Mylib
{
public:
    Mylib(){};
};
#endif // MYLIB_H

最后我添加了mylib_global.h:

#ifndef MYLIB_GLOBAL_H
#define MYLIB_GLOBAL_H
#include <QtCore/qglobal.h>
#if defined(MYLIB_LIBRARY)
#  define MYLIBSHARED_EXPORT Q_DECL_EXPORT
#else
#  define MYLIBSHARED_EXPORT Q_DECL_IMPORT
#endif
#endif // MYLIB_GLOBAL_H

为了使函数在C++中可用,我对库中的每个函数都使用了这些行

#ifdef __cplusplus
extern "C"{
#endif
void foo();
#ifdef __cplusplus
}
#endif

当使用MSVC2012编译时,一切似乎都很好,我得到了一些.dll文件。但后来我把库发给了一个人,他希望在Borland C++中使用它。他告诉我,我必须用一些DEF文件编译它来告诉VS编译器正确的名称,并用__stdcall而不是__cdecl编译它。但我不知道如何在Qt中做到这一点。如有任何解释和帮助,我们将不胜感激。感谢

附言:我看过在旧Borland中使用VS dll和在C Builder中导入VS dll的帖子,但它们并没有帮助我理解这个问题。

如果您想导出foo函数,您需要以某种方式告诉链接器。建议您使用.def文件,这非常简单。

只需在您的项目目录中创建一个类似于exports.def的文件,并在其中写入类似于的内容

EXPORTS foo

然后转到您的库项目设置->链接器->输入->模块定义文件

并填写你的.def文件名