- ベストアンサー
アドレスでの参照の仕方
VB初心者です。 Cは、ポインタ変数にアドレスを入れると、 実態を参照してくれますが、 それをVBでは、どうすればいいのでしょうか?? VBでC関数から文字列が格納されているアドレスを受け取って、 実態の文字列を参照したいのですがどうやったら参照できるのでしょうか?? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
文字列のアドレスを渡して、そのアドレスに文字列 が返却されるタイプであれば、単純に文字列を指定 すればOKです。 関数側で、メモリを確保して、そのアドレスが 返ってくるタイプのインタフェースの場合、VBで は、ポインタを処理する型がないため、そのアドレ スの内容を自分の変数の領域に移動させることで、 読み取ります。 移動させる関数は、RtlMoveMemoryで、下記では、 MemCopyとして定義しています。これを使って、 Dimで定義した文字列の領域に(移動前に、必要な だけの文字を入れておくこと)コピーすればOK です。 Public Declare Sub MemCopy _ Lib "Kernel32" Alias "RtlMoveMemory" _ (hpvDest As Any, _ hpvSource As Any, _ ByVal cbCopy As Long)
その他の回答 (1)
- ykkw_2001
- ベストアンサー率26% (267/1014)
VBとCとのやりとりは、VBからCで作ったDLLを呼出しているんですね。(Declare....で) だとして、その辺は、MSDNのDLLの呼び出しのあたりに詳しく書かれています。 要は、VBの引数受け渡し方法は、2種類(By Ref,By Val)で、デフォルトは、By Ref(だったかな?)つまり、ポインタ渡しです。 しかし、VBの文字列変数は、独特のメモリの取り方をやってるので、ヘッダー部がついている。また、NULLで終わらないので、Cの文字列とは違う、でも、質問のような受け渡しは可能です。
お礼
ありがとうございました。 参考にさせていただきます。
お礼
ありがとうございました。 この方法でやってみます。