VisualBasicで使用されている「VarPtr」という関数?があります。
処理内容は
「変数のアドレスを長整数型(long)で返します。
変数名に指定できるのは、ユーザ定義データ型 / 整数型(integer) / 長整数型(long) / integer の配列 / long の配列 / 文字列型(string) です。
この関数はDLL呼び出しの時に変数のアドレスを渡したいときに使用します。」
だそうです。
これがDelphiでは使用出来ないっぽいので、他に代用出来る方法・関数を知っている方、お手数ですが教えてほしいのですが。
ことの発端はプリンタの設定をファイルに保存し、後々にそのファイルから復元を行うというプログラムで、RICOHやCANONなどの独自の設定部分を各サイトのAPIを使用して取得・保存しようという処理の中で、「CopyMemory」と言う処理が出てきて、そこでVarPtrを使用しているからです。
私自身ポインタに一度も触れた事もなかったので、大変悩んでいます。
よろしくお願いします。
外しているかもしれませんが、
@ 演算子
は、いかがですか?
var
X, Y: Integer; // X と Y は Integer 型の変数
P: ^Integer; // P は Integer を指す
begin
X := 17; // X に値を代入する
P := @X; // X のアドレスを P に代入する
Y := P^; // P を逆参照して結果を Y に代入する
end;
ちなみにCopyMemoryに相当する関数として、DelphiにはMoveがあります。
(厳密に言うと、領域の重なりを考慮するのでMoveMemoryに近いですが)
こちらはポインタではなく変数をそのままとります。後はSourceとDestinationが逆。
CopyMemory(@Y, @X, SizeOf(X)) は
Move(X, Y, SizeOf(X)) と書くことができます。