No.2ベストアンサー
- 回答日時:
APIを使えば出来ます。
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (cStr1 As Any, cStr2 As Any, ByVal iLen As Long)
構造体→文字列
Call CopyMemory(strB, ByVal typeA, Len(typeA))
文字列→構造体
Call CopyMemory(typeA, ByVal strB, Len(typeA))
ただし構造体のメンバに配列があると使えません(VBの配列はメモリを連続してとらない為、メモリーリークします)。
また構造体の中身は string *5 などの固定長である必要があります。
以上です。
No.5
- 回答日時:
こんな感じです。
Private Type typBuff
sBuff As String * 6 '12Byte
End Type
Private mBuff As typBuff
Private Type typData
a As Long '4Byte
b As Long
c As Long
End Type
Private Sub Command1_Click()
Dim Dat As typData
With Dat
.a = 2
.b = 4
.c = 6
End With
LSet mBuff = Dat
End Sub
Private Sub Command2_Click()
Dim Dat As typData
LSet Dat = mBuff
MsgBox Dat.a & "," & Dat.b & "," & Dat.c
End Sub
Sub
原理としてはCopyMemoryと同じですよね?なんとなくこっちの方がすっきりしている気はしますけど。
実は、扱う構造体の中はLong型とString型なので、Longが使えるかどうか多少不安だったんですが、これで大丈夫と分かりました。
ありがとうございました。
No.4
- 回答日時:
#2です。
#3の方が「化けるのでは」? と言われていますので、いちおう補足しておきますね。
これによって化ける事はありません。その為に値渡ししていますので(値渡しする事によって、暗黙の変換を回避しています)。
実際に開発したシステムで、長らく使っていますので問題はないはずです。
ただメモリ操作をするのであれば、バイナリで扱った方が無難なのは確かです。
やはりバイナリになりますか。ポインタの事は分かっているのでCでなら作れるのですが、VBのポインタがどういう物になるのかが良くわからなくて…まあ、いい訳じみてますが。
やはり、暇を見てバイナリの事は勉強しておきたいです。
No.3
- 回答日時:
回答2と同じく RtlMoveMemory を使うけど、文字列で渡すと
暗黙にUnicode/SJIS変換がされるので、化けるでのでは?
やはり、バイナリで渡すべきと思います。
参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=250487
この回答への補足
ちなみに、仕様の関係で直接RtlMoveMemoryを使って構造体をファイルマップ上に移すことは出来ないんです。
なので、バイナリなり文字列なりに一度格納する必要が出るのですが…格納できても取り出せないという訳なんです。
参照まで用意していただいて本当にありがとうございます。
実は、最初の方のレスが来た時にこのスレットは見つけていたんですが…構造体→バイナリ→共有→バイナリ…までは行くんですが、バイナリ→構造体がどうしても出来なくて…
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
構造体のコピー
Visual Basic(VBA)
-
構造体配列の特定のメンバーをFor~Eachで
Visual Basic(VBA)
-
クラスのプロパティに構造体を使いたい。
Visual Basic(VBA)
-
-
4
VBの画面サイズについて
Visual Basic(VBA)
-
5
VB6でユーザー定義型がNothingかどうか調べるには?
Visual Basic(VBA)
-
6
Visual Basic 6.0 コンボボックスのChangeイベントが発生しません
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムによく出てくるst...
-
C#でstringをポインタとして渡す
-
TCL言語で文字列検索方法を教え...
-
C++で入力した文字列から数字を...
-
シリアル通信で0x00を送信した...
-
char型配列の最大要素数
-
引用符と二重引用符
-
nullと""、\\0とEOFの違いにつ...
-
_tcscpy_s(wcscpy_s)の第二引数...
-
CSVファイルの「”」について
-
文字列操作
-
文字コードによる表記
-
C言語 文字列 比較に関する質問
-
Shift_JIS(16進)を文字に変換す...
-
数字の入った配列をファイルへ...
-
%dなどの違い
-
C言語 配列の長さの上限
-
セグメントエラー
-
関数から配列を返すには?
-
Integer変数をカラにしたいので...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C#でstringをポインタとして渡す
-
プログラムによく出てくるst...
-
nullと""、\\0とEOFの違いにつ...
-
シリアル通信で0x00を送信した...
-
%dなどの違い
-
TCL言語で文字列検索方法を教え...
-
WSH(VBS)でJSONの文字列を読み...
-
_tcscpy_s(wcscpy_s)の第二引数...
-
C++で入力した文字列から数字を...
-
VB6.0でのバイナリデータの扱い...
-
16進数を2文字ずつ配列に格納し...
-
VBA-DLLの引数受け渡しについて
-
数字の入った配列をファイルへ...
-
引用符と二重引用符
-
C言語の勉強しています。すみま...
-
c#で他のアプリの文字入力フォ...
-
構造体→文字列→構造体 をする方法
-
Excelシートを固定長のテキスト...
-
バイナリファイル中の日本語文...
-
アルファベットの出て来た回数
おすすめ情報