[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2004/09/15(Wed) 08:06
投稿者名:MISIO
Eメール:
URL :
タイトル:
構造体をstring型へ
MISIOです。
いつもお世話になっています。

public type AAA
   aaa as string * 8
   bbb as string * 5
end type
上記のような構造体がありまして、
それを宣言して値を代入。

private type_AAA as AAA
AAA.aaa = "1"
AAA.bbb = "23"

この代入したAAAとstring型の変数とを結合すると
だめといわれます。皆さんはこの場合どうしていますか?
private buf as string
buf = "123"
buf = buf + AAA   ←ここでだめといわれる。

一応解決策は
buf = buf + AAA.aaa
buf = buf + AAA.bbb
としていますが、構造体のメンバが多いと大変なので
知恵を拝借できればと思います。

投稿時間:2004/09/15(Wed) 09:32
投稿者名:Ken
Eメール:
URL :
タイトル:
Re: 構造体をstring型へ
> MISIOです。
> いつもお世話になっています。
>
> public type AAA
>    aaa as string * 8
>    bbb as string * 5
> end type
> 上記のような構造体がありまして、
> それを宣言して値を代入。
>
> private type_AAA as AAA
> AAA.aaa = "1"
> AAA.bbb = "23"
>
> この代入したAAAとstring型の変数とを結合すると
> だめといわれます。皆さんはこの場合どうしていますか?
> private buf as string
> buf = "123"
> buf = buf + AAA   ←ここでだめといわれる。
>
> 一応解決策は
> buf = buf + AAA.aaa
> buf = buf + AAA.bbb
> としていますが、構造体のメンバが多いと大変なので
> 知恵を拝借できればと思います。

配列にしてループでまわすほうがいいんじゃないんですかね?

投稿時間:2004/09/15(Wed) 09:58
投稿者名:通りすがり
Eメール:
URL :
タイトル:
Re: 構造体をstring型へ
---- 宣言 ----
Private Type Test1
    aaa As String * 8
    bbb As String * 5
End Type

Private Type Test2
    buff As String * 13
End Type

---- ロジック ----
    Dim uTest1 As Test1
    Dim uTest2 As Test2

    uTest1.aaa = "aaaaaa"
    uTest1.bbb = "bbbbbb"

    LSet uTest2 = uTest1

    Debug.Print uTest2.buff
---- ここまで ----

注意として、固定長でかつString型のみの構造体でしか
利用できません。
(それ以外で、仕様するとメモリーがどうなるやら。。。)

あとは、Win32APIのRtlMoveMemory と VarPtrを使って
構造体をループさせて変数に格納とかも可能かと。。。

投稿時間:2004/09/15(Wed) 12:41
投稿者名:MISIO
Eメール:
URL :
タイトル:
Re^2: 構造体をstring型へ
MISIOです。
本当にありがとうございます。
これで、やりたいことが可能になりました。
コーディング量が少ないのがよいので。


> あとは、Win32APIのRtlMoveMemory と VarPtrを使って
> 構造体をループさせて変数に格納とかも可能かと。。。

RtlMoveMemoryもやってみたのですがうまいこと動かなかったものでして、
もしかしたらRtlMoveMemoryでコピーするときも入れる先を同じ固定長にすれば
うまいこといってたのかも?
普通のstringにいれていたので