Я делаю этот проект DLL и не включаю никаких макросов, специфичных для компилятора.
Файлы импорта (.exe) компилируются без ошибок и ошибок после импорта методов в мой файл DLL. Они находятся на разных проектах, но одно и то же решение.
Могу ли я все испортить из-за того, что я не использую эти соглашения о вызовах?
Мои DLL-файлы находятся в пространстве имен и реализованы в режиме ООП.
Но иногда или в большинстве случаев .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 вообще. Все идет в исполняемый файл.
Microsoft требует __declspec(dllexport)
в длл и __declspec(dllimport
) в exe. Это становится сложным, поэтому есть макросы, чтобы разобраться.
CLASS_DECLSPEC
Затем компилятор выясняет, какой из __declspec
использовать.
Увидеть:http://msdn.microsoft.com/en-us/library/8fskxacy(v=vs.80).aspx
Других решений пока нет …