1

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

しかし、構造体の共用体はどうでしょうか? どうすればそれを達成できますか?

4

2 に答える 2

0

最も簡単な方法は、バリアント型を使用することです。これには、他の型を含めることができます。

を VBに直接マッピングすることはおそらくないvoid *ため、簡単な変換ではなく、ユニオンの使用方法を検討する必要があることに注意してください。

于 2012-12-02T19:07:35.750 に答える
0

コマンドを使用し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
    ....

これは、2 つの型の間の名前のない共用体と同じ効果があります。

于 2012-12-02T19:32:08.263 に答える