我有一种感觉,答案是"不可能",但我会试一试......我处于一个不值得羡慕的位置,修改了一些增强功能的旧版VB6应用程序.转换为更智能的语言不是一种选择.该应用程序依赖于大量用户定义的类型来移动数据.我想定义一个公共函数,它可以引用任何这些类型并提取包含的数据.
在伪代码中,这是我正在寻找的:
Public Sub PrintUDT ( vData As Variant )
for each vDataMember in vData
print vDataMember.Name & ": " & vDataMember.value
next vDataMember
End Sub
Run Code Online (Sandbox Code Playgroud)
似乎这个信息需要在某个地方提供给COM ...任何VB6大师都在乎小心翼翼地拍摄?
谢谢,
担
显然,这曾经是VB6和VBA短路并执行第一个真实情况的一种方式:
Select Case True
End Select
Run Code Online (Sandbox Code Playgroud)
这仍然在使用(VB.NET)?
我正在尝试对旧的VB Web应用程序进行一些小的更改我需要在字符串中添加引号我到目前为止没有运气.字符串是
Dim sql As String = "Select * from Usertask Where UserId = " & Session("UserId") & " and JobID=" & ddlReqTask.SelectedValue
Run Code Online (Sandbox Code Playgroud)
我需要在Session("UserID")值周围添加引号.
我有一个用C#编写的COM可见DLL,我想在VB6应用程序中使用它.我有两个DLL的主要用例,我想知道该/codebase选项何时适用以及何时最好在GAC中注册.
用例:
DLL将被加载到另一台开发人员PC上,并且需要在Project > References菜单下的VB6 IDE中访问
当VB6应用程序发布时,DLL将被加载到生产机器上
有关适当使用的任何信息/codebase都会有所帮助.
谢谢.
我发现自己最近不得不写一些VBA代码,只是想知道是否有人曾经遇到过有关VBA垃圾收集器如何工作的任何细节?.Net GC确实有很好的记录,但我在VBA GC上找不到一丝细节,除了模糊的提到它是一个参考计数器.我认为它与VB6 GC非常相似,但无法找到任何相关信息.
具体来说,我有兴趣知道:
这比任何特别需要知道的更多是出于好奇,任何洞察都非常感激!
我最近不得不深入研究一些VB6代码,我看到了这个模式:
dim o as obj
set o = new obj
Run Code Online (Sandbox Code Playgroud)
为什么不呢?
dim o as new obj
Run Code Online (Sandbox Code Playgroud)
我记得15年前有一个很好的理由,但我不记得它现在是什么.谁还记得吗?原因仍然有效吗?
我正在检查VB6代码自动转换为C#并转换someArray(3)为转换器someArray[3].但是相应于旧的代码文档,它应该选择第三个元素而不是第四个元素,就像在翻译版本中那样.
数组索引是否在VB6中基于0?或者他们从1开始?
我有一些从VB6代码中使用的.NET代码.我一直在XP机器上通过创建一个列出依赖.NET程序集的VB6.exe.manifest文件来开发它.
例如,假设我的2个.NET程序集是Some.Assembly.A.dll和Some.Assembly.B.dll,这里是VB6.EXE.manifest的样子(我使用的是version = 1.1.0.0,因为那是版本我在AssemblyInfo.cs中设置了.NET AssemblyVersion:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
type = "win32"
name = "client"
version = "1.1.0.0" />
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Some.Assembly.A"
version="1.1.0.0" />
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Some.Assembly.B"
version="1.1.0.0" />
</dependentAssembly>
</dependency>
</assembly>
Run Code Online (Sandbox Code Playgroud)
然后,与同一目录中的DLL一起,我有程序集和它们自己的清单文件.这是一个示例"Some.Assembly.A.dll.manifest":
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
type="win32"
name="Some.Assembly.A"
version="1.1.0.0" />
<clrClass
clsid="{F1234567-1234-1234-1234-123456789012}"
progid="Some.Assembly.A.Class1"
threadingModel="Both"
name="Some.Assembly.A.Class1" >
</clrClass>
<file name = "Some.Assembly.A.dll" />
</assembly>
Run Code Online (Sandbox Code Playgroud)
我还运行tlbexp引用的DLL来创建TLB文件,这是我在VB6项目文件中引用的内容.
我想转移到Windows 7 64 BIT机器.使用相同的方法,当我点击在WIN7机器上实例化.NET对象的VB6代码时,我得到了
"ActiveX组件无法创建对象."
在XP上,它成功了.如果我故意拼错VB6.EXE.manifest中的Dependent组件 - 在XP上我得到了
"此应用程序无法启动,因为应用程序配置不正确.重新安装应用程序可能会解决此问题." …
在我的VB6应用程序中,我有一个声明的对象数组...
Dim MyArray() as MyClass
Run Code Online (Sandbox Code Playgroud)
随着处理的进行,该数组被填充
Set MyArray(element) = passed_object
Run Code Online (Sandbox Code Playgroud)
并且因为不再需要元素,
Set MyArray(otherelement) = Nothing
Run Code Online (Sandbox Code Playgroud)
使用数组时,我想使用类似的循环
For i = 1 To Ubound(MyArray)
If MyArray(i) <> Nothing Then ' Doesn't compile
...do something...
End If
Next i
Run Code Online (Sandbox Code Playgroud)
但我无法得到任何可能 - 想要编译.我也试过了
If MyArray(i) Is Not Nothing Then
Run Code Online (Sandbox Code Playgroud)
我是否应该这样做,如果是这样,我应该在这里进行什么测试?