我正在制作这个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