C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■102673 / 2階層)  VB6 シリアライズされたオブジェクトを VB.netで復元
□投稿者/ こじま まさと (2回)-(2023/12/05(Tue) 12:04:01)
魔界の仮面弁士 さん

お世話になっております。

確かに、vb側の
HP(1 To 8) As Single
の理解が不十分でした。

ご指摘の通り、プロパティを自作して対応して、
VB6でシリアライズされたオブジェクトを、
VB.Netでデシリアライズできました。

ご対応いただきありがとうございました。







No102672 (魔界の仮面弁士 さん) に返信
> ■No102671 (こじま まさと さん) に返信
>>デシリアライズができませんでした。
> .NET 側の構造体サイズが、VB6 側のユーザー定義型サイズと異なっていますよね?
>
> 元の HP は (1 To 8) As Single の 32 バイトなのに、
> .NET 側では 36 バイトで宣言されていますし。
>
> Option Base 1 をエミュレートしたいのであれば、プロパティを自作して対応しましょう。
>
>
>
> <Serializable>
> Structure Layout
>   Public FileType As String
>   Public Version As String
>   Public Orientation As Short
>   <VBFixedArray(7)> Public _HP() As Single
>   <VBFixedArray(15)> Public LV() As Short
>
>   Public Property HP(Index As Integer) As Single
>     Get
>       If Index < 1 OrElse 8 < Index Then Throw New IndexOutOfRangeException()
>       Return _HP(Index - 1)
>     End Get
>     Set(value As Single)
>       If Index < 1 OrElse 8 < Index Then Throw New IndexOutOfRangeException()
>       _HP(Index - 1) = value
>     End Set
>   End Property
>
>   'Public Overrides Function ToString() As String
>   '  Return $"FileType={FileType}, Version={Version}, Orientation={Orientation}, HP={{{String.Join(", ", Array.ConvertAll(_HP, AddressOf Convert.ToString))}}}, LV={{{String.Join(", ", Array.ConvertAll(LV, AddressOf Convert.ToString))}}}"
>   'End Function
> End Structure
>
>
>
> Dim t As New Layout()
> Dim fno As Integer = FreeFile()
> FileOpen(fno, FileFullPath, OpenMode.Binary)
> Do Until EOF(fno)
>   'Option Strict Off の場合
>   '
>   'FileGet(fno, t)  
>   '
>
>   'Option Strict On の場合
>   Dim w As ValueType = t
>   FileGet(fno, w)
>   t = DirectCast(w, Layout)
>
>   'Debug.WriteLine(t)
> Loop
> FileClose(fno)
解決済み
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[1]: VB6 シリアライズされたオブジェクトを VB.netで復元 /魔界の仮面弁士 返信無し
 
上記関連ツリー

VB6 シリアライズされたオブジェクトを VB.netで復元 / こじま まさと (23/12/05(Tue) 09:12) #102671
Re[1]: VB6 シリアライズされたオブジェクトを VB.netで復元 / 魔界の仮面弁士 (23/12/05(Tue) 10:24) #102672
  └ VB6 シリアライズされたオブジェクトを VB.netで復元 / こじま まさと (23/12/05(Tue) 12:04) #102673 解決済み ←Now

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信