ユーザー定義体を関数に渡したいのですが、訳があり Friend も タイプライブラリーも使えません
そこでポインターで受渡ししようとするのですが、1回目はデバッガ−も正常に動作するのですが
2回目以降デバッカーを動かそうとすると VBが不安定になり落ちてしまいます。
どなたか 良い方法を教えて頂けないでしょうか?
kouzou As ユーザー定義体
Func(VarPtr(kouzou))
Public Function Func(pPtrFIB1 As Long) As Boolean
Dim iFlag As Long
Dim wkFBlk1 As ユーザー定義体
Dim pPtrFIB1Dst As Long
pPtrFIB1Dst = VarPtr(wkFBlk1)
' ポインターアドレスからユーザ定義情報を取得する。
MoveMemory ByVal pPtrFIB1Dst, ByVal pPtrFIB1, LenB(wkFBlk1)
↑
Api RtlMoveMemoryのこと
MoveMemory ByVal wkFBlk1, ByVal pPtrFIB1, LenB(wkFBlk1)
↑これで動きませんか?
てゆーか、別にこんな無理矢理やらなくても
Funcの引数としてユーザー定義型を指定した方が良いと思いますけど。
くわしい説明は省略しますが
ユーザー定義型を直接 引数として指定できないのです。
それでこのような方法をとっているわけです。
受け渡すメンバは、どのような内容になっていますか?
メンバの構成などによっては、VarPtrで受け渡すという手法が
使えない事もありますので。。。
例えばSHFILEOPSTRUCTなどのように、Len()の結果とLenB()の結果が
異なるようなデータ型の場合は、単純に先頭からRtlMoveMemoryする事が
できませんので、メンバごとに複写していく必要があります。
ツイート | ![]() |