相关疑难解决方法(0)

VBA将类添加到集合中

我有一个名为Holding的类模块.其中有几个公共变量.我的代码是这样的:

Dim holdings as Collection
Dim h as Holding

Set holdings = new Collection

For i = 1 to last
    Set h = new Holding

    h.x = y
    '... etc

    holdings.Add(h)
Next i
Run Code Online (Sandbox Code Playgroud)

这给了我错误的"对象不支持这个属性或方法" holdings.Add(h),但我看到的每个地方都给出了如何实现这个的确切示例.我错过了什么?

collections vba

12
推荐指数
1
解决办法
1万
查看次数

C#DLL不能影响VB6应用程序引用传递的数字的值

我有一个调用VB6 DLL的遗留VB6应用程序,我试图将VB6 DLL移植到C#而不触及主VB6应用程序代码.旧的VB6 DLL有一个接口通过引用接收VB6长(32位整数),并更新了该值.在我编写的C#DLL中,主VB6应用程序从未看到更新的值.它就像真正编组到C#DLL的内容一样,是对原始数据副本的引用,而不是对原始数据的引用.我可以通过引用成功传递数组,并更新它们,但单个值不行.

C#DLL代码看起来像这样:

[ComVisible(true)]
public interface IInteropDLL
{
   void Increment(ref Int32 num);
}
[ComVisible(true)]
public class InteropDLL : IInteropDLL
{
    public void Increment(ref Int32 num) { num++; }
}
Run Code Online (Sandbox Code Playgroud)

调用VB6代码看起来像这样:

Private dll As IInteropDLL
Private Sub Form_Load()
    Set dll = New InteropDLL
End Sub
Private Sub TestLongReference()
    Dim num As Long
    num = 1
    dll.Increment( num )
    Debug.Print num      ' prints 1, not 2.  Why?
End Sub
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我需要做些什么来解决它?提前致谢.

c# vb6 vb6-migration

4
推荐指数
1
解决办法
612
查看次数

VB6 Variant类型

我来自面向对象的背景.为什么"Test"(注意引号)显示在此代码片段中(在消息框中).我期望逻辑测试:'如果Test ="True"'返回False,因为变体包含布尔值而不是字符串.因此,我不希望消息框出现,但它确实:

Dim Test As Variant

Test = True

If Test = "True" Then //line 5
    MsgBox ("Test")
End If
Run Code Online (Sandbox Code Playgroud)

vb6

1
推荐指数
1
解决办法
8532
查看次数

标签 统计

vb6 ×2

c# ×1

collections ×1

vb6-migration ×1

vba ×1