我正在制作这个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
。我需要它吗?
这将破坏我的所有代码语法
请回答......
答案 0 :(得分:3)
听起来好像是在链接应该在dll中的库文件中。所以你根本就没有使用dll。一切都进入了exe文件。
Microsoft需要exe中的__declspec(dllexport)
和__declspec(dllimport
}。它变得复杂,因此有一些宏可以对其进行排序。
CLASS_DECLSPEC
然后,编译器会排出要使用的__declspec
中的哪一个。
请参阅:http://msdn.microsoft.com/en-us/library/8fskxacy(v=vs.80).aspx