掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ポインタに代入した時のアドレス (ID:207)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>単独で実行 確かにそのとおりでした。 バージョン依存でこちらではエラーが出ないのか…と思っていたのですが、 デバッグではなく、Windowsから単独で実行するとエラーが出ました。 まさかデバッグで起きないことが単独では出るとは思ってませんでした。 私はWindowsのシステムに詳しくないのでよくわかりませんが、 ひよこさんの考えられている、コードの書き換え失敗によるエラーという感じが強そうな気がします。 >プログラムコードは書き換えられないようにプロテクトされているということでしょうか? そういうことなのでしょうね。しかし、自分でメモリを確保して、そこに実行コードを書きこんでいくことは可能なようで、別にWrite属性さえあればExecute属性をつける必要は無いようです。 const C_InstancePageSize = 4096; var P : PByte; Proc : procedure; begin P := VirtualAlloc(nil, C_InstancePageSize, MEM_COMMIT,PAGE_READWRITE); // GetMemでもOK? P^ := $C3; // RET Proc := Pointer(P); Proc; end; は動きますし…。 一応解決策の1つとして、上に挙げた @str[1] をポインタの取得に使ってみてはどうでしょうか。これなら単独でも問題無く動きました。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.