Использование Delphi DLL с VS2010. "Не удалось найти точку входа функции _DataReady@0 в DSOLink.dll"

Я пытаюсь использовать цифровую сферу Vellman PCSU1000 в одном из моих проектов, которые я пишу на C++ в Visual Studio 2010.

Для этого мне нужно использовать две библиотеки DLL, предоставляемые производителем устройства: DSOLink.dll и PCSU1000D.dll. У меня нет других связанных файлов. Насколько я понял из руководства, эти DLL были написаны и скомпилированы в Deplhi. Существует краткое описание функций, содержащихся в каждой из DLL и как их использовать на разных языках программирования. Для языка C++ производитель выбрал Borland C++ Builder и добавил следующий код (для использования DSOLink.dll он аналогичен PCSU1000D.dll): DSOLink.h

//---------------------------------------------------------------------------
// DSOLink.h

#ifdef __cplusplus
extern "C" { /* Assume C declarations for C++ */
#endif
#define FUNCTION __declspec(dllimport)

FUNCTION bool __stdcall DataReady(); /*this particular line is added by me based on
 list of the functions listed by dumpbin/exports DSOlink.dll and manual*/
FUNCTION __stdcall ReadCh1(int* ptr);
FUNCTION __stdcall ReadCh2(int* ptr);
#ifdef __cplusplus
}
#endif
//---------------------------------------------------------------------------

В соответствии с инструкцией в MSDN: http://support.microsoft.com/kb/131313 я создал файл.lib. Благодаря этому решение Build Solution завершается успешно, но отладка возвращает сообщение об ошибке "Не удается найти точку входа функции _DataReady@0 в DSOLink.dll".

Из статьи: http://bcbjournal.org/articles/vol4/0012/Using_Visual_C_DLLs_with_CBuilder.htm?PHPSESSID=ab5f6c83b3da921591a490a5accb5bf7 Я знаю, что в C++ Builder ключевое слово * *__ означает, что выражение "* в обратном выражении" означает, что выражение "* в обратном выражении" означает противоположное выражение.

Я понимаю, что в этой ситуации я вынужден использовать *__stdcall* в VS (это должен быть тот же метод управления очисткой стека в DLL и в заголовке, который используется в приложении) и метод без декорации одновременно... Я читал, что файлы.DEF могут помочь, но я теряюсь, как именно это следует использовать. Я пытался создать DEF по-разному:

EXPORTS
DataRead=DataRead
.
.
.

EXPORTS
DataRead=_DataRead@0
.
.
.

EXPORTS
_DataRead@0=DataRead
.
.
.

и добавил один из них сразу в мой проект, но ни один из них не решает проблему.

Кто-нибудь имеет представление о том, как правильно заставить VS не использовать и не ожидать, что украшенные имена будут *__stdcall*? Или, может быть, причина моей проблемы в чем-то другом, и кто-то знает это?

Заранее спасибо.

0 ответов

Другие вопросы по тегам