visual Когда использовать __declspec (dllexport) в переполнении стека

Я делаю этот проект 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 внутрь. Мне это нужно здесь?

Это разрушит все мои синтаксисы кода

ответы пожалуйста ….

3

Решение

Звучит так, как будто вы связываете в своей библиотеке файлы, которые должны быть в DLL. Таким образом, вы не используете DLL вообще. Все идет в исполняемый файл.

Microsoft требует __declspec(dllexport) в длл и __declspec(dllimport) в exe. Это становится сложным, поэтому есть макросы, чтобы разобраться.

CLASS_DECLSPEC

Затем компилятор выясняет, какой из __declspecиспользовать.

Увидеть:http://msdn.microsoft.com/en-us/library/8fskxacy(v=vs.80).aspx

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]