Memory.dll
http://www.vector.co.jp/soft/win95/prog/se358509.html
こちらに付属しているDelphiのサンプルプログラムが、Delphi 6 Personalでは正しく動作するのですが、XE3でコンパイルすると起動はするのですがうまく動作しません。
XE3は体験版を使用しているのですがそれが原因でしょうか?
それともどこか書き換える必要があるのでしょうか?
よろしくお願い致します。
PCharと定義されてるものをPAnsiCharに変えてみたらどうでしょ
>PCharと定義されてるものをPAnsiCharに変えてみたらどうでしょうか?
ちょっと興味があり,やってみました.
(1) http://www.vector.co.jp/soft/win95/prog/se358509.html
からダウンロードしたファイルを解凍
(1) [サンプル集] の sampleについて.txt に書いてある
うさみみハリケーンをダウンロードしようとしたが,よくわからないので,
インターネットで検索し,以下からダウンードして解凍
http://www.vector.co.jp/soft/win95/prog/se375830.html
(2) [Delphi] [Sample] の Project1.dpr を起動
下のコードに修正してコンパイルしたら,IDE を閉じる
(3) UsaTest2.EXE を起動
これは,任意のフォルダからの起動で OK
(4) [Sample] のテストプログラム Project1.exe を起動
(5) 読み込み,書き込みができることを確認
(6) UsaTest2.EXE 側での変更も取得できることを確認
おそらく,作成した DLL が Ansi版で出来ているのではないかと思われます.
function ReadMemory(pname:PAnsiChar ; adr:DWORD ; var rdata:DWORD ; size:DWORD):Integer;stdcall;external 'Memory.dll';
function WriteMemory(pname:PAnsiChar ; adr,wdata,size:DWORD):Integer;stdcall;external 'Memory.dll';
procedure TForm1.Button1Click(Sender: TObject);
var
pname: PAnsiChar;
adr,rdata,size:DWORD;
begin
pname := 'UsaTest2.EXE';
adr := $00402148;
size := 2;
if (ReadMemory(pname,adr,rdata,size) = 0) then
Edit1.Text := '読み込み失敗'
else
Edit1.Text := IntToStr(rdata);
end;
以下,同様に PAnsiChar に修正.
もしかしたら,
var
pname : AnsiString にして,
ReadMemory(PAnsiChar(pname),adr,rdata,size)
のようにした方がいいかも知れません.
動作確認は,Windows 7 U64(SP1) + Delphi XE pro と Delphi XE3(UP1) Pro VCL-32 です
au様、的確な解答ありがとうございます。
Mr.XRAY様、具体例等、詳しくありがとうございます。
お二方のお陰でうまく動作させる事が出来るようになりました。
本当に助かりました。ありがとうございました。
ツイート | ![]() |