VarPtrを用いて ユーザー定義体の受渡しを行いたい


tera  2003-08-06 03:58:18  No: 78899

ユーザー定義体を関数に渡したいのですが、訳があり 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のこと


nanashi  2003-08-06 19:39:17  No: 78900

MoveMemory ByVal wkFBlk1, ByVal pPtrFIB1, LenB(wkFBlk1)

↑これで動きませんか?

てゆーか、別にこんな無理矢理やらなくても
Funcの引数としてユーザー定義型を指定した方が良いと思いますけど。


tera  2003-08-07 03:12:07  No: 78901

くわしい説明は省略しますが

  ユーザー定義型を直接  引数として指定できないのです。
それでこのような方法をとっているわけです。


魔界の仮面弁士  2003-08-07 07:02:02  No: 78902

受け渡すメンバは、どのような内容になっていますか?
メンバの構成などによっては、VarPtrで受け渡すという手法が
使えない事もありますので。。。

例えばSHFILEOPSTRUCTなどのように、Len()の結果とLenB()の結果が
異なるようなデータ型の場合は、単純に先頭からRtlMoveMemoryする事が
できませんので、メンバごとに複写していく必要があります。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加