Мне нужно написать некоторые функции на C для чужого проекта VB6 (устаревшее выходит за рамки этого вопроса).
Во время начальных тестов я не мог заставить вызовы работать.Я предоставил файл .def, я пытался использовать соглашения о вызовах __declspec (dllexport), stdcall и WINAPI.При каждом вызове я получаю сообщение об ошибке в VB6, в котором говорится «плохое соглашение о вызовах DLL».
Прототипы функций Win32 C:
long WINAPI BitmapFile_Open(char *pszFileName);
void WINAPI BitmapFile_Close(long bmf);
.__declspec (dllexport) и stdcall, и ни один из них не работает.
Файл Def:
LIBRARY ImageLib
EXPORTS
BitmapFile_Open @1
BitmapFile_Open @2
Глобальный модуль VB:
Declare Function BitmapFile_Open Lib "ImageLib.dll" (ByVal fileName As String) As Long
Declare Function BitmapFile_Close Lib "ImageLib.dll" (ByVal bmFile As Long)
Код VB:
Dim myFile As Long
myFile = BitmapFile_Open("test.bmp")
BitmapFile_Close (myFile)
Также обратите внимание, что в исходных функциях bmFile фактически является адресом (указателем на структуру), но в VB он будет представлен как long.Тем не менее, поскольку VB6 не поддерживает указатели, я долго использую код C.Я надеюсь, что вы можете понять, что я пытаюсь получить здесь.Это не имеет ничего общего с ошибкой, которая происходит.Любая помощь приветствуется.
Редактировать: Я использовал средство обхода зависимостей, чтобы определить, что функции действительно экспортируются.VB6 просто не вызывает их без ошибок.