.net — проблема со связыванием с декорированными именами DLL в C ++ (32 бита) в Visual Studio

У меня есть библиотека функций DSP в C ++, и я хочу динамически ссылаться на них во время выполнения. Я использую PDLL.h метод, чтобы обернуть мои классы (например, FFT) в функции стиля C и загрузить их на лету в другие приложения C ++. Я хочу использовать эти функции в приложениях .NET и COM-компонентах, поэтому я должен использовать __stdcall который украшает имена в 32-битных сборках.

Для того, чтобы восстановить имена, я использую трюк, упомянутый здесь: C ++ DLL Export: украшенные / искаженные имена (Ответ WQW, 2-й вниз). Так, например, в файле .h моей библиотеки я объявил свои упакованные функции так:

#pragma comment(linker, "/EXPORT:DoFFT=_DoFFT@12")
RTLIBS_API DoFFT(FFT* x, DOUBLE* pdDataIn, DOUBLE* pdDataOut);

Это действительно работает, и когда я смотрю в dll с помощью обходчика зависимостей, я вижу, что есть запись для DoFFT и _DoFFT @ 12.

Проблема, которая у меня есть, заключается в том, что когда я пытаюсь построить проект, который ссылается на эту библиотеку (динамически, во время выполнения, вообще не используя файл .lib), я получаю ошибки компоновщика для всех функций в моей dll, т.е.

Error   31  error LNK2001: unresolved external symbol _DoFFT@12

Я не понимаю, почему это происходит. Во-первых, символ _DoFFT @ 12 существует (в соответствии с обходчиком зависимостей), и, во-вторых, почему компоновщик ищет его в первую очередь? Я ссылаюсь на него во время выполнения, а не во время компиляции, так как мой проект узнает об этом символе?

Все функции объявлены с одной и той же цепочкой макросов, которая сокращается до (например,):

extern "C" __declspec(dllexport) int __stdcall DoFFT(FFT* x){...}

Ничего общего с библиотекой не объявляется на стороне клиента.

0

Решение

Задача ещё не решена.

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

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

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