こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

通貨型はバイト型に変換可能?

構造体に入っている通貨型(Currency)をバイト型に変換したいのですが
思ったように変換されません。
どのように変換すればよいのでしょうか?

--------------------
通貨型を含まない場合
--------------------
Type tpSample
nint1 As Integer ' 2バイト
nInt2 As Integer ' 2バイト
End Type

Sub Main()
Dim LudtpSample As tpSample
Dim LbyteBuff(100) As Byte

With LudtpSample
.nint1 = 1
.nInt2 = 1
End With

' バイト配列にコピー
Call CopyMemory(ByVal VarPtr(LbyteBuff(0)), LudtpSample, Len(LudtpSample))

End Sub

[LbyteBuffの中身]
LbyteBuff(0) = 1
LbyteBuff(1) = 0
LbyteBuff(2) = 1
LbyteBuff(3) = 0


--------------------
通貨型を含む場合
--------------------

' 構造体に通貨型を追加
Type tpSample
nint1 As Integer ' 2バイト
cCur As Currency ' 8バイト?
nInt2 As Integer ' 2バイト
End Type

Sub Main()
Dim LudtpSample As tpSample
Dim LbyteBuff(100) As Byte

With LudtpSample
.nint1 = 1
.cCur = 1
.nInt2 = 1
End With

' バイト配列にコピー
Call CopyMemory(ByVal VarPtr(LbyteBuff(0)), LudtpSample, Len(LudtpSample))

End Sub

[LbyteBuffの中身]
LbyteBuff(0) = 1
LbyteBuff(1) = 0
LbyteBuff(2) = 0
LbyteBuff(3) = 0
LbyteBuff(4) = 16
LbyteBuff(5) = 39
LbyteBuff(6) = 0
LbyteBuff(7) = 0
LbyteBuff(8) = 0
LbyteBuff(9) = 0
LbyteBuff(10) = 0
LbyteBuff(11) = 0
LbyteBuff(12) = 0
LbyteBuff(13) = 0

通貨型を構造体に含めるとバイトがずれていきます。
通貨型はバイト型に変換不可能なのでしょうか?
その場合、構造体にLong型を超えるデータを格納したい場合、通貨型(Currency)を使用する以外の方法がありますでしょうか?

投稿日時 - 2009-08-05 18:57:30

QNo.5184450

困ってます

質問者が選んだベストアンサー

> バイト配列にコピー
LenはLenB を使うべし。

>通貨型を構造体に含めるとバイトがずれていきます。

ずれる原因はInteger型を使っているから。
APIに渡す構造体は4の倍数バイトの変数を使用するべし。
IntegerはLongを使うべし。

投稿日時 - 2009-08-05 19:53:13

補足

追加で質問させていただきます。

CopyMemoryを使用する場合、4の倍数の変数を使うとはString型などは使用できないということでしょうか?

投稿日時 - 2009-08-06 09:04:47

お礼

通貨型が悪いわけじゃなかったんですね。
ありがとうございます。早速試してみます。

投稿日時 - 2009-08-05 22:59:27

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問