はじめて書き込みします。最近、プログラムを勉強しているものです。
VBであるCで作られているDLLを使用しているのですが、その呼び出した関数の仕様書に戻り値はfarポインタ型と記述されていました。
このようなポインタの参照先データを変数にコピーするには、どうしたら良いでしょうか? 初心者丸出しですいません....
RtlMoveMemory(API)を使うとか・・・
Sayさんご返事ありがとうございます。APIでcopymemoryを使用したのですが、ダメでした。もしかしたら、この戻り値がおかしいのかとか思っています。3866552(LONG型定義)などの戻り値が返ってきます。
CopyMemoryはvoid型です。
戻り値はありません。
すいません。間違えてました。
DLLからよびだした関数の戻り値です。したがって、Copymemoryの2番目の引数になるんですけど????
RtlMoveMemory(CopyMemory)の定義は、どうように記述していますか?
また、VBのバージョンは何ですか?
引数が、ByRef As Longなのか、ByVal As Longなのか、Ref As Anyなのか(VB6)
ByRef As Integerなのか、ByVal As IntPtrなのか、ByRef As IntPtrなのか(VB.NET)
あるいはそれ以外なのか…それによって、呼び出し方も変化してきますよ。
魔界の仮面弁士さん お返事ありがとうざいます。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
宣言部を注意したらできました。ありがとうございました。
ツイート | ![]() |