这是这个问题的后续问题,因为我现在正在失去理智。
有人指给我看这篇文章,我正试图从那里复制第 4 节。
所以我在 MSVC++2010 中创建了一个空的 C++ 项目,在其中创建了一个新的 .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
编译器在当前目标不支持 .def 文件中输出两个警告CODE
,但它最终会编译并生成文件,然后我将其复制到and和。DATA
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 文件做一些事情,对?
我究竟做错了什么?!谢谢你的帮助。