在c++中何时使用__declspec(dllexport)
visual When to use __declspec(dllexport) in C++
我正在制作这个DLL项目,并且不包含任何特定于编译器的宏。
导入器(.exe)文件编译干净,没有错误后产生的方法导入我的DLL文件。他们在做不同的项目,但解决方案是一样的。
我是否因为没有使用这些调用约定而把事情搞砸了?
我的DLL文件在一个命名空间中,并以OOP的方式实现。
但有时或大多数时候,. LIB不会生成,所以我必须将我的DLL设置切换为LIB并复制生成的。LIB文件并再次将其转回DLL文件。
我甚至不知道我正在使用的库是。dll还是。lib文件。
有人给我解释清楚了吗?编辑
我将添加一些我真的很困惑何时使用它的情况。
假设我有这些:
namespace
{
class Base abstract
{
public:
Base()
{
//initialize base components
}
virtual void func() = 0;
public:
//interface
};
class Derive : public Base
{
public:
Derive();
void func() override;
private:
//interface
};
}
我应该在这里使用declspec(dllexport)
吗:
constructors
(如Base()
和Derive()
) ?virtual
功能?我把它放在哪里?派生式还是基底式?还是两个?- 公共变量?(可怕的)
我看到在其他头文件中,他们添加了extern
。我在这里需要吗?
这会破坏我所有的代码语法
答案请…
听起来好像你正在链接应该在dll中的库文件。所以你根本不用dll。所有的东西都放到exe文件中。
Microsoft要求dll中的__declspec(dllexport)
和exe中的__declspec(dllimport
。它变得很复杂,所以有宏来整理。
CLASS_DECLSPEC
编译器然后选出要使用的__declspec
中的哪一个。
见:http://msdn.microsoft.com/en-us/library/8fskxacy (v = vs.80) . aspx
相关文章:
- DLL:当 SDK 头文件不使用 __declspec(dllexport) 时,我可以使用它吗
- DLLexport 类模板实例(专用化),减少了仅标头模板库的编译时间
- Clang 是否可以在使用可见性属性时生成导入库(不带 __declspec(dllexport))?
- 为什么MSVC(Visual C++)需要单独的dllimport和dllexport属性,而gcc不需要
- 使用 dllimport 代替 dllexport
- 如何在结构定义中组合__attribute__((dllexport))和[[nodiscard]]?
- C ++:DECLSPEC,静态库和DLL
- VC 链接器错误使用Dllimport/DLLEXPORT宏将标题包括在多个项目中
- 如何使用ctypes将类对象从c ++(DllExport)返回到python,反之亦然
- 使用 dllexport 传递 std::string
- Using __declspec( dllexport )
- 'ShowSUM':__declspec(dllexport)不能应用于具有__clrcall调用约定的函数
- 如何基于每个成员覆盖类范围的__declspec(dllexport)注释?
- 使用__declspec(dllexport)从DLL导出函数
- C++ [[gnu::visibility( "default" )]] vs __declspec(dllexport) on Windows 和 Linux
- 尽管使用了正确的dllExport-Visual Studio,但没有函数导出到DLL中
- 是否可以在程序集中编写dllexport(然后是dllimport)函数
- Inline and dlimport/dllexport
- C#:Cdecl-DllExport,参数中有一个指向类实例的指针
- 当在导入函数之前添加__declspec(dllexport)时,它会做什么