【发布时间】:2011-02-14 14:16:30
【问题描述】:
这是this question 的后续问题,因为我现在正在为此失去理智。
有人将我指向this article,我正试图从那里复制第 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;
}
(我从here 获得了LibMain 代码,但我认为它在这里没有任何作用。)
然后,我在项目中添加了一个 .def 文件并将其放入其中:
;vb6dll32 DEF File
LIBRARY vb6dll32
CODE PRELOAD MOVEABLE DISCARDABLE
DATA PRELOAD MOVEABLE
EXPORTS
PassInteger
编译器会输出两个警告,即当前目标不支持 .def 文件中的 CODE 和 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 文件做点什么,对吧?
我做错了什么?!感谢您的帮助。
【问题讨论】: