Visual Studio 2008 — Невозможно экспортировать функции из C ++ DLL

Мне нужно создать C ++ MFC DLL с помощью Visual Studio 2008. Чтобы сделать это, я создал проект DLL MFC Win32 Console в Visual Studio и создал функцию, которая создает объект и использует его метод для печати строки на экране. Вроде как это:

__declspec(dllexport) void Foo(void);

где:

    void Foo(void){
print* obj = new print;
obj->testPrint();
return;
}

void print::testPrint(void){
printf("Bar\n");
return;
}

Он успешно компилируется и генерирует DLL, но когда я пытаюсь использовать его, я всегда получаю:
«ошибка LNK2019: неразрешенный внешний символ» void __cdecl Foo (void) «

Я попытался использовать Dependency Walker, и он не показывает какую-либо функцию в DLL. Я делаю что-то неправильно? Я много искал и до сих пор не получил никаких выводов из того, что может происходить.

1

Решение

Похоже, вы, возможно, не включили заголовочный файл, который определяет экспорт в любом файле cpp. Помните, что файлы cpp являются единственными фактически скомпилированными. Поэтому убедитесь, что вы включили заголовок с __declspec(dllexport) void Foo(void); хотя бы в одном файле cpp. Также убедитесь, что в вашем проекте Linker-> Input settings не указан файл определения модуля (def).

Не пытайтесь связываться с DLL, пока обходчик зависимостей не покажет, что что-то действительно экспортировано.

1

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

По умолчанию в Windows используется cdecl, поэтому вам нужно явно указать, что он экспортировал declspec в вызывающей программе, или вместо этого экспортировать его из DLL как cdecl.

0

Вам нужно экспорт символ явно из файла CPP также:

__declspec(dllexport)
void Foo(void)
{
print* obj = new print;
obj->testPrint();
return;
}

Спецификация в заголовке предназначена только для клиента (EXE) и является подсказкой для компоновщика с сервера (DLL).

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