OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

アドレスでの参照の仕方

  • すぐに回答を!
  • 質問No.131003
  • 閲覧数136
  • ありがとう数2
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 45% (5/11)

VB初心者です。
Cは、ポインタ変数にアドレスを入れると、
実態を参照してくれますが、
それをVBでは、どうすればいいのでしょうか??
VBでC関数から文字列が格納されているアドレスを受け取って、
実態の文字列を参照したいのですがどうやったら参照できるのでしょうか??
よろしくお願いします。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル11

ベストアンサー率 49% (139/279)

文字列のアドレスを渡して、そのアドレスに文字列
が返却されるタイプであれば、単純に文字列を指定
すればOKです。

関数側で、メモリを確保して、そのアドレスが
返ってくるタイプのインタフェースの場合、VBで
は、ポインタを処理する型がないため、そのアドレ
スの内容を自分の変数の領域に移動させることで、
読み取ります。

移動させる関数は、RtlMoveMemoryで、下記では、
MemCopyとして定義しています。これを使って、
Dimで定義した文字列の領域に(移動前に、必要な
だけの文字を入れておくこと)コピーすればOK
です。

Public Declare Sub MemCopy _
Lib "Kernel32" Alias "RtlMoveMemory" _
(hpvDest As Any, _
hpvSource As Any, _
ByVal cbCopy As Long)
お礼コメント
gaburi

お礼率 45% (5/11)

ありがとうございました。
この方法でやってみます。
投稿日時 - 2001-09-11 16:43:12
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル13

ベストアンサー率 26% (267/1014)

VBとCとのやりとりは、VBからCで作ったDLLを呼出しているんですね。(Declare....で) だとして、その辺は、MSDNのDLLの呼び出しのあたりに詳しく書かれています。  要は、VBの引数受け渡し方法は、2種類(By Ref,By Val)で、デフォルトは、By Ref(だったかな?)つまり、ポインタ渡しです。 しかし、VBの文字列変数は、独特のメモリの取り方をやってるので、ヘッダー部が ...続きを読む
VBとCとのやりとりは、VBからCで作ったDLLを呼出しているんですね。(Declare....で)
だとして、その辺は、MSDNのDLLの呼び出しのあたりに詳しく書かれています。
 要は、VBの引数受け渡し方法は、2種類(By Ref,By Val)で、デフォルトは、By Ref(だったかな?)つまり、ポインタ渡しです。
しかし、VBの文字列変数は、独特のメモリの取り方をやってるので、ヘッダー部がついている。また、NULLで終わらないので、Cの文字列とは違う、でも、質問のような受け渡しは可能です。
お礼コメント
gaburi

お礼率 45% (5/11)

ありがとうございました。
参考にさせていただきます。
投稿日時 - 2001-09-11 16:46:55


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ