gpt4 book ai didi

c++ - Visual Studio C++ : When should I be using __declspec(dllimport)?

转载 作者:可可西里 更新时间:2023-11-01 18:21:57 29 4
gpt4 key购买 nike

我对 Visual Studio 2005 及更高版本中的 DLL 构建/链接有疑问。基本上我的理解和经验是这样的:

为了构建一个 DLL,我指定了项目属性来构建一个 DLL,然后我在我想从 DLL 中公开公开的任何函数或成员前面加上 __declspec(dllexport)。构建项目将产生一个 DLL、一个库和一个可以作为 API 或其他东西部署的头文件。

另一方面,要让您的其他已编译的可执行应用程序动态链接到 DLL 并使用其功能,您只需让您的可执行项目包含头文件并链接到 DLL 时创建的小 lib 文件被建。只要编译后的应用程序可以找到 DLL,一切就可以了。

这是我的经验,也是 Microsoft DLL 构建教程如何描述 MSDN 上的所有内容。我想知道:这是标准做法吗?你什么时候需要在任何地方使用 __declspec(dllimport)?我错过了什么吗?

谢谢!

最佳答案

是的,您会使用 __declspec(dllimport) 并且您通常有一个宏来控制源文件是导出(如果它是您的 DLL 的一部分)还是导入(如果它是 using-executable 的一部分)符号。

在您的 DLL 中,您可以将 list 常量设置为某种build设置,例如“BUILDING_MY_DLL”,然后在您的头文件中创建这样的宏:

#ifdef BUILDING_MY_DLL
#define MY_DLL_EXPORT __declspec(dllexport)
#else
#define MY_DLL_EXPORT __declspec(dllimport)
#endif

然后像这样装饰你导出的函数:

MY_DLL_EXPORT int func(int y);

您也可以通过这种方式导出整个类:

class MY_DLL_EXPORT InterestingClass
{
...
};

关于c++ - Visual Studio C++ : When should I be using __declspec(dllimport)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4721376/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com