繁体   English   中英

将C ++联合结构转换为VB6

[英]Convert C++ Union Struct to VB6

我的C ++应用程序中有以下结构:

struct textField
{
        //0
        union nameField
        {
                void* ptr;
                char cstring[16];
        } text;
        //16
        uint8_t textLength;
        //17
        char unknown1[3];
        //20
        uint8_t fieldType;
        //21
        char unknown2[3];
        //24
        uint32_t unknown3;
        //28
};

而且我知道在VB6中,它看起来像这样:

Private Type textField        ' 0
    cstring(0 To 15) As Byte  ' 16
    textLength       As Byte  ' 17
    unknown1(0 To 2) As Byte  ' 20
    fieldType        As Byte  ' 21
    unknown2(0 To 2) As Byte  ' 24
    unknown3         As Long  ' 28
End Type

但是结构中的联合呢? 如何实现?

最简单的方法是使用变量类型-它可以包含其他任何类型。

请注意,有可能是没有直接的映射void *到VB,所以你需要研究工会是如何使用的,而不仅仅是一个快速转换。

使用LSET命令。

它不是根据该结构声明的,而是在声明该对象的实例之后声明的。

范例

Private Type MyType1
    x as Integer
    y as Integer
    z as Integer
    w as Integer
End Type

Private Type MyType2
    a as Long
    b as Long
End Type

Private Sub Form_Load()
    Dim t1 as MyType1
    Dim t2 as MyType2
    t1.x = 0
    t1.y = 0
    t1.z = -1
    t1.w = -1

    LSet t2 = t1
    ....

这与两种类型之间的未命名联合具有相同的效果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM