Delphi2010か、XEかで、RTTIの拡張というのが行われたと思うのですが
全然使ってないので使い方がわかりません。
Button1Clickイベントや
自分で定義したメソッド名の内部から
そのメソッド名を取得するのは
どのようにしたらいいのでしょうか?
Delphi2007時代のRTTIではそのような動作は実現できなかったと思いますが
RTTIが拡張されてきっとできるんだと思います。
VB.NETでいうところの、下記のような事がしたいわけです。
@IT総合トップ > Insider.NET > Module キーワードで定義されたモジュール名の取得
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=40442&forum=7
これができると
たとえばですが、メソッド内にログ書き出しメッセージを入れておくと
メソッド名を指定しなくても、どのメソッドからきている
ログなのかがわかるようになるので
コピペしてログ出力コードを埋め込むなどということが楽になりそうなのです。
--
Delフサギコ ミ・д・彡 <delfu...@gmail.com>
MLホームページ: http://www.freeml.com/delphi-users
----------------------------------------------------------------------
「あなたはマック?それともマクド?」気になるコトを調査しました!
http://ad.freeml.com/cgi-bin/sa.cgi?id=gaNYW
-----------------------------------------------------[freeml by GMO]--
>Button1Clickイベントや
>自分で定義したメソッド名の内部から
>そのメソッド名を取得するのは
>どのようにしたらいいのでしょうか?
これはattributeやらの新RTTIの勉強も兼ねてと思い探ってみたのですが、
できませんでした。
アセンブラでスタックから自分のアドレスを取得してcontextに設定しGetTMethodするとか、なんかわけのわからんおまじないが必要かも。
文字列によるMethod実行がpublic宣言でできるようになってました。
速達、動的クラスローディングに使用します。
TValue配列にパラメーターを型無しで渡せるというのは、プラグインには超ありがたい。
MLホームページ: http://www.freeml.com/delphi-users
----------------------------------------------------------------------
★おにぎりせんべい分布調査★気になるコトを調査しました!
http://ad.freeml.com/cgi-bin/sa.cgi?id=gbMQ9
新しい、RTTI は Delphi 2010 Handbook(Marco Cantu) が詳しいですが、
お望みの機能は無さそうです。
実行中のメソッドの取得は RTTI ではなくてスタックフレームの解析になると思いますが、
JCLでMAPファイルを埋め込めば可能だったと思います。
新 RTTI と組み合わせれば面白いことができるかもしれません。
2010年10月28日17:21 かぶだれ <delphi...@freeml.com>:
--
----------
naka...@asahi.email.ne.jp from Hino city Tokyo Japan
MLホームページ: http://www.freeml.com/delphi-users
----------------------------------------------------------------------
練習の予定も共有スケジュールに登録しよう!
http://ad.freeml.com/cgi-bin/sa.cgi?id=gbN9A
簡単ではないようですね。残念です。
JCLは使っていますがあまり慣れていないので
「MAPファイルを使って」
というだけでは、私にはハードルが高そうなので
とりあえずあきらめておく事にします。
2010年10月28日18:10 中村拓男(自宅) <delphi...@freeml.com>:
> 中村@ブレーンです。
>
> 新しい、RTTI は Delphi 2010 Handbook(Marco Cantu) が詳しいですが、
> お望みの機能は無さそうです。
>
> 実行中のメソッドの取得は RTTI ではなくてスタックフレームの解析になると思いますが、
> JCLでMAPファイルを埋め込めば可能だったと思います。
> 新 RTTI と組み合わせれば面白いことができるかもしれません。
>
> 2010年10月28日17:21 かぶだれ <delphi...@freeml.com>:
>> こんにちは。かぶだれです。
>>
>>>Button1Clickイベントや
>>>自分で定義したメソッド名の内部から
>>>そのメソッド名を取得するのは
>>>どのようにしたらいいのでしょうか?
>>
>> これはattributeやらの新RTTIの勉強も兼ねてと思い探ってみたのですが、
>> できませんでした。
>> アセンブラでスタックから自分のアドレスを取得してcontextに設定しGetTMethodするとか、なんかわけのわからんおまじないが必要かも。
>>
>> 文字列によるMethod実行がpublic宣言でできるようになってました。
>> 速達、動的クラスローディングに使用します。
>> TValue配列にパラメーターを型無しで渡せるというのは、プラグインには超ありがたい。
>>
>>
MLホームページ: http://www.freeml.com/delphi-users
----------------------------------------------------------------------
新メンバーを便利な@招待機能で一気に登録しよう!
http://ad.freeml.com/cgi-bin/sa.cgi?id=gcUmK
Delフサギコ さんは書きました:
>簡単ではないようですね。残念です。
>
>JCLは使っていますがあまり慣れていないので
>「MAPファイルを使って」
>というだけでは、私にはハードルが高そうなので
>とりあえずあきらめておく事にします。
>
いや、そう難しくはないですよ。要は
デバッグ情報を正しく埋め込んで、ちょこっと
コードを書くだけです。
ネットを探すと JclDebug の使用例がが結構落ちてます。
「JEDI Code Library」
http://delphi.wikia.com/wiki/JEDI_Code_Library
また、JCL 自身にもJclDebug のサンプルプロジェクトが含まれています。
JCL の Docs/expert.html の
「Debug Extension for JclDebug unit」に JclDebug ユニットを
利用するために必要なデバッグ情報(JDBG情報)の埋め込み方が
書いてあります。JCLをインストールすると必要な
ツール が IDE にインストールされます。
蛇足:
JCL2.2 って既に XE をサポートしているんですね。
Delphi 6, C++Builder 6 や Turbo Delphi も未だ
サポートしているのが素晴らしいです。
----------
東京都 日野市 中村拓男
MLホームページ: http://www.freeml.com/delphi-users
----------------------------------------------------------------------
★おにぎりせんべい分布調査★気になるコトを調査しました!
http://ad.freeml.com/cgi-bin/sa.cgi?id=gd1dD
教えていただいたページを見て、次のように書きまして動作確認しました。
ありがとうございます。
uses
JclDebug;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(CurrentFunctionName);
end;
{$W+}
function CurrentFunctionName: string;
begin
Result := jcldebug.GetLocationInfoStr(Caller(1));
end;
メッセージは、次のような表示になります。
---------------------------
Project1
---------------------------
[00478AE6] Unit1.TForm1.Button1Click (Line 35, "Unit1.pas")
---------------------------
OK
---------------------------
デバッグ情報の埋め込みは、
IDEメニューに組み込まれている
JCL Option メニューから、設定を次の通りにしています。
Debug info converter
Generate jdbg files
Always enabled
Insert JDBG data into the binary
Always enabled
バイナリに埋め込むとか、jdbgファイルを作るとか、そういうのが必要なのですね。
勉強になりました。
2010年11月4日16:07 中村@ブレーン <delphi...@freeml.com>:
> 中村@ブレーンです。
>
> Delフサギコ さんは書きました:
>>簡単ではないようですね。残念です。
>>
>>JCLは使っていますがあまり慣れていないので
>>「MAPファイルを使って」
>>というだけでは、私にはハードルが高そうなので
>>とりあえずあきらめておく事にします。
>>
>
> いや、そう難しくはないですよ。要は
> デバッグ情報を正しく埋め込んで、ちょこっと
> コードを書くだけです。
>
> ネットを探すと JclDebug の使用例がが結構落ちてます。
> 「JEDI Code Library」
> http://delphi.wikia.com/wiki/JEDI_Code_Library
>
> また、JCL 自身にもJclDebug のサンプルプロジェクトが含まれています。
>
> JCL の Docs/expert.html の
> 「Debug Extension for JclDebug unit」に JclDebug ユニットを
> 利用するために必要なデバッグ情報(JDBG情報)の埋め込み方が
> 書いてあります。JCLをインストールすると必要な
> ツール が IDE にインストールされます。
>
MLホームページ: http://www.freeml.com/delphi-users
----------------------------------------------------------------------
学園祭で撮った写真をMLにアップしよう!
http://ad.freeml.com/cgi-bin/sa.cgi?id=gfaVN