仕事上でVisual Basic(以下VBと略す)を使うことになったのですが、
VBではC系言語のようにポインタを使うことができず、C系言語で作られたDLLの関数(メソッド)を呼び出す際に
みなさん苦労されているようにネット検索をして感じました。
それでまあ、自分の持っているC言語のスキルを利用して、VBしか使われていない方のための
ごく簡単なDLLを作りました。
VB 6.0の頃に在った VerPtr の代わりをしようというものです。

GetAdr.dll (6,656byte)

【使い方】
(1)GetAdr.dll をVBの実行ファイル(.exe)のあるフォルダにコピーして下さい。
(2)ご使用になりたい Class の中に次のように宣言してください。
Public Declare Function GetAdr Lib "GetAdr.dll" (ByRef ptr As Integer) As Integer

戻り値としてアドレスが返ります。
引数の型は、Integerの他にByte,Char,Short,Longなど、通常の型が使えます。
ただし、String は使えません。VB は String に対して特別な扱いをしているようなので、
String に限っては ByRef を宣言しても、正直にアドレスを渡すようなことはしないようなのです。
いくつかの型で使用したい場合は、Overloads を宣言すると便利です。
<例>
Public Overloads Declare Function GetAdr Lib "GetAdr.dll" (ByRef ptr As Byte) As Integer
Public Overloads Declare Function GetAdr Lib "GetAdr.dll" (ByRef ptr As IntPtr) As Integer

【注意】
本ライブラリは Microsoft Visual C++ 2010 Express で作られています。
Windows XP 上でしかテストしていませんが、本当に簡単な中身なので、大抵のWindowsで動作すると想います。
64Bit OS には対応しておりません。(64Bit OSだと、戻り値を Long になるものを作る必要がある)
アドレスを使う行為は、アンセーフなものなので、うかつなことをするとシステムを破壊します。
なにか起きても当方では責任を取れません。
自己責任をもって注意して使ってください。

ホームへ