Это дополнительный вопрос к этому вопросу , потому что я сейчас схожу с ума по этому вопросу.
Кто-то указал мне на эту статью иЯ пытаюсь скопировать оттуда раздел 4.
Поэтому я создал пустой проект C ++ в MSVC ++ 2010, создал новый файл .cpp внутри него и вставил туда следующий код:
#include <windows.h>
#define CCONV _declspec(dllexport) // used to be __stdcall but resulting DLL is identical
int CALLBACK LibMain (HANDLE hInstance, WORD wDataSeg, WORD wHeapSize,
LPSTR lpszCmdLine)
{
return 1;
}
short CCONV PassInteger (short intgr, short far *pintgr)
{
*pintgr = intgr;
return intgr + 1;
}
(я получил LibMain
код от здесь , но я думаю, что он здесь ничего не делает.)
Затем я добавил файл .def вспроецируйте и вставьте в него следующее:
;vb6dll32 DEF File
LIBRARY vb6dll32
CODE PRELOAD MOVEABLE DISCARDABLE
DATA PRELOAD MOVEABLE
EXPORTS
PassInteger
Компилятор выводит два предупреждения о том, что CODE
и DATA
в файле .def не поддерживаются для текущей цели, но в конечном итоге компилируется и генерирует файлvb6dll32.dll
, который я затем скопировал в C:\windows\system
и ...\system32
и C:\
.
Затем я создал проект VB6, поместил кнопку в форму и добавил этот исходный код:
Private Declare Function PassInteger Lib "vb6dll32.dll" _
(ByVal intgr As Integer, pintgr As Integer) As Integer
Private Function BuiltIntest() As Integer
Dim i As Integer
Dim ir As Integer
i = 7
i = PassInteger(i, ir)
Print i, ir
Return
End Function
Private Sub Command1_Click()
MsgBox (BuiltIntest())
End Sub
Теперь, когда я нажимаю кнопку, она по-прежнему выдает «Ошибка времени выполнения 53»: файл vb6dll32.dll не найден ».(Это происходит, даже если я указываю ему полный путь в исходном коде VB, например, «C: \ vb6dll32.dll», и файл определенно находится там. Я попытался указать его местоположение без пути и без «.dll» и т. Д., ничего не меняется.)
Меня также беспокоит то, что когда я запускаю regsvr32 c:\vb6dll32.dll
, он также говорит мне: «Модуль C: \ vb6dll32.dll не может быть загружен. и т. д. и т. д.» .. Понятия не имеючто он должен делать, но это, как правило, должно что-то делать для файлов DLL, верно?
Что я делаю не так ?!Спасибо за вашу помощь.