我正在制作这个 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)
吗:
构造函数
(例如Base()
和Derive()
)?虚拟
函数?我会把它放在哪里?在派生中还是在基础中?还是两者兼而有之?- > 公共(public)变量? (太可怕了!)
我在其他头文件中看到,他们将 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
关于c++ - 何时在 C++ 中使用 __declspec(dllexport),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15311577/