1

我正在创建一个要在 vb.net 中导入的 c++ dll。

我发现在 dll 的头文件中组织导入和导出的最佳方法是以下类型:

#ifndef MY_DLL_EXPORTS
    #define MY_DLL_EXPORT __declspec(dllexport)
#else
    #define MY_DLL_EXPORT __declspec(dllimport)
#endif

#ifdef __cplusplus
extern "C"
{
#endif

    MY_DLL_EXPORT BOOL my_function(uint32_t x);

#ifdef __cplusplus
}
#endif

我的问题是,应该在哪里定义 __cplusplus 和 MY_DLL_EXPORTS ?

我以前没有这样做过,我似乎无法在代码中找到它的位置。我读了一些关于将这些定义放在

Project Properties -> Configuration Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions

我是否将它们放在 DLL 的项目属性中?如果我这样做了,在使用这个 DLL 时,它们是否总是被定义,所以 if 语句总是会转到dllimport

另外,__cplusplus已经定义还是必须定义它?

4

2 回答 2

1

定义 COMPILING_DLL 的最佳位置是编译器的命令行。如果您使用 Visual Studio IDE,那么它位于项目属性 ... C/C++ ... 预处理器 ... 预处理器定义中。

__declspec(dllimport) 是 Microsoft 对 C++ 的特定扩展。Microsoft 拥有出色的在线文档。

于 2013-09-24T04:04:01.063 回答
1

__cplusplus是由 C++ 编译器为您定义的,而不是由 C 编译器定义的。这是您可以确定您的代码是由 C 还是 C++ 编译器编译的方法。这就是为什么它被用来保护extern "C"构造。AC 编译器会忽略它(因为它已经发出 C 链接)。

其他常量可以在编译器的命令行中定义(例如,在您列出的菜单中),或者在某处的代码中:

#define MY_DLL_EXPORTS
于 2013-09-24T04:04:15.883 回答