VBでfarポインタを参照するには?

解決


no-fly-bird  2004-01-14 00:03:50  No: 81418

はじめて書き込みします。最近、プログラムを勉強しているものです。
VBであるCで作られているDLLを使用しているのですが、その呼び出した関数の仕様書に戻り値はfarポインタ型と記述されていました。
このようなポインタの参照先データを変数にコピーするには、どうしたら良いでしょうか?      初心者丸出しですいません....


Say  2004-01-14 01:07:29  No: 81419

RtlMoveMemory(API)を使うとか・・・


no-fly-bird  2004-01-14 05:11:21  No: 81420

Sayさんご返事ありがとうございます。APIでcopymemoryを使用したのですが、ダメでした。もしかしたら、この戻り値がおかしいのかとか思っています。3866552(LONG型定義)などの戻り値が返ってきます。


Say  2004-01-14 06:44:25  No: 81421

CopyMemoryはvoid型です。
戻り値はありません。


no-fly-bird  2004-01-14 09:04:58  No: 81422

すいません。間違えてました。
DLLからよびだした関数の戻り値です。したがって、Copymemoryの2番目の引数になるんですけど????


魔界の仮面弁士  2004-01-14 18:06:37  No: 81423

RtlMoveMemory(CopyMemory)の定義は、どうように記述していますか?
また、VBのバージョンは何ですか?

引数が、ByRef As Longなのか、ByVal As Longなのか、Ref As Anyなのか(VB6)
ByRef As Integerなのか、ByVal As IntPtrなのか、ByRef As IntPtrなのか(VB.NET)
あるいはそれ以外なのか…それによって、呼び出し方も変化してきますよ。


no-fly-bird  2004-01-14 22:11:17  No: 81424

魔界の仮面弁士さん  お返事ありがとうざいます。VB6.0を使用しています。

詳しく説明しますと、以下にDeclare宣言してませんがDLLを用いてTIFF画像のTAG情報を得る関数でnIGTag(タグ番号),nDateType(データの型),lptagdata(データへのfarポインタ),dwSize(サイズ(バイト))を取得します。

次に、それらの情報を引数として関数send_me_tag_infoでlptagdata(データへのfarポインタ)のポインタ先のデータを取得しようと試みていますがうまくいきません(泣)。

一応、nIGTag(タグ番号),nDateType(データの型),dwSize(サイズ(バイト)にはそれらしいデータが入っていたのでlptagdata(データへのfarポインタ)も取得できていると思います。
lptagdata(データへのfarポインタ)には、3866552とか入ってくるんですけどこれが違うのかなーとか思っております。

Option Explicit

'CopyMemory宣言部
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

'タグデータ取得関数
Public Function send_me_tag_info(ByVal lpPrivate As Long, ByVal nIGTag As Long, ByVal nDateType As Long, ByVal lptagdata As Long, ByVal dwSize As Long) As Boolean
    
    Dim NewSubfileType As Long

    Select Case nIGTag

    Case 10254
      
      'CopyMemory使用個所
      CopyMemory NewSubfileType, ByVal lptagdata, LenB(NewSubfileType)

      send_me_tag_info = True

    End Select

End Function


no-fly-bird  2004-01-15 09:04:22  No: 81425

宣言部を注意したらできました。ありがとうございました。


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

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






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