调试DLL时无法检索从VB6 EXE传递到VB6 DLL的VB.ListBox对象
我正在维护一个带有日志功能的DLL。我想在这个DLL的方法中添加一个ListBox参数,以允许显示日志记录 该dll基本上可以这样描述:调试DLL时无法检索从VB6 EXE传递到VB6 DLL的VB.ListBox对象,dll,com,listbox,vb6,Dll,Com,Listbox,Vb6,我正在维护一个带有日志功能的DLL。我想在这个DLL的方法中添加一个ListBox参数,以允许显示日志记录 该dll基本上可以这样描述: ' Class loggingDll.loggingObject Public Function processIt([...], aLogBox As Object) ' Simple test code lines... Dim l As VB.ListBox Set l = aLogBox ' [...] End Function EXE附带一个GUI
' Class loggingDll.loggingObject
Public Function processIt([...], aLogBox As Object)
' Simple test code lines...
Dim l As VB.ListBox
Set l = aLogBox
' [...]
End Function
EXE附带一个GUI,包括一个VB.ListBox。这个ListBox
(我们称之为LogBox
)以如下方式传递给DLL:
' Exe DllCaller.Exe
Private Sub Form_Load()
Dim aLoggingObject as loggingDll.loggingObject
Set aLoggingObject = New loggingDll.loggingObject
aLoggingObject.processIt(LogBox)
End Sub
当我运行EXE时,它工作得非常好。但是,当在调试模式下运行带有此EXE的DLL时(项目->属性->调试选项卡选项“启动程序”以及EXE的路径),我在Set l=aLogBox
处得到了一个丑陋的“类型不匹配”
我在aLogBox
变量上添加了一个间谍TypeName(aLogBox)
返回“ListBox”
,但是aLogBox
的内容是空的(尽管VB.ListBox
对象充满了属性)
发生了什么事?为什么调试模式没有相同的行为?为什么不将
aLogBox作为VB.ListBox传递?
?如果我在DLL源代码中的函数processIt()
的原型中执行此操作,我会得到:“编译错误:私有对象模块不能在公共对象模块中用作公共过程的参数或返回类型、公共数据成员或公共用户定义类型的字段”
为什么不将aLogBox作为VB.ListBox传递?
?如果我在函数processIt()的原型中这样做的话
在DLL源代码中,我得到:“编译错误:私有对象模块不能在公共对象模块中用作公共过程的参数或返回类型、公共数据成员或公共用户定义类型的字段”