DLL обычно поставляется с заголовочным файлом (.h) и связанной библиотекой импорта (.lib), которая имеет дело с соглашениями о вызовах, экспортированными прототипами функций и т. Д.
Просто включите файл заголовка, ссылку на библиотеку импорта, и вы сможете напрямую вызывать функции.
В этом заголовочном файле будет указано, что функции используют соглашение о вызовах __stdcall
. Вы совершенно определенно не должны и не должны писать отдельную DLL-оболочку. Это добавило бы совершенно бесплатный слой сложности.
Перечитав ваш вопрос и ваш комментарий, я считаю, что у вас есть следующая архитектура:
Application (out of your control)
|
|
Plugin module (your code)
|
|
Legacy DLL (out of your control)
Старая DLL экспортирует свою функцию, используя __stdcall
. Приложение импортирует функцию из плагина, используя __cdecl
.
Если это краткое изложение верно, то, конечно, вы должны импортировать из устаревшей DLL с помощью __stdcall
и экспортировать в приложение с помощью __cdecl
. Поскольку эти части интерфейса находятся вне вашего контроля, у вас нет выбора.
Однако я нахожу вопрос и комментарии очень трудными для подражания. Возможно, я не до конца понял. Не стесняйтесь добавлять больше информации, чтобы уточнить в редактировании вопроса.
После обновления я подозреваю, что все ваши проблемы касаются того, как связать устаревшую DLL VB6 с вашей C ++ DLL. Поскольку у вас нет заголовочного файла (.h) для библиотеки VB6, вы, вероятно, пишете свои собственные переводы.
Если я правильно помню, VB6 поддерживает только __stdcall
, который вы сейчас используете. Поэтому ваши проблемы, скорее всего, связаны с ошибочными переводами экспортированных функций VB в прототипы C ++.
Я думаю, что вам лучше всего сосредоточиться на том, чтобы эти переводы прототипов были правильными. Возможно, вы могли бы рассмотреть возможность сделать это в контексте отдельного автономного тестового проекта, чтобы избежать сложности всего приложения.
Если вам нужна дополнительная помощь от переполнения стека, я думаю, вам нужно будет предоставить объявления функций VB6 и ваши попытки перевода, но я думаю, что это будет предметом нового вопроса (ов).