- PR -

Module キーワードで定義されたモジュール名の取得

投稿者投稿内容
まったけ
会議室デビュー日: 2006/09/08
投稿数: 13
投稿日時: 2007-07-27 11:19
こんにちは。

自分で書いたモジュール内で、Module キーワードで定義されたモジュール名を取得する方法を模索しています。ご存じの方がいらしたら是非ご教授願います。


■やりたいこと

Module hogehoge
Public Sub hogeFunc()
  'ここで "hogehoge" という文字列を取得したい
End Sub
End Module


■試したこと

・System.Diagnostics.StackTrace は、Exception オブジェクトが必要。
・クラスではないので、Me 修飾子は使えない。
・StackFrame( True ).GetFileName() などは、デバッグモードでしか機能しない。
・StackFrame( True ).GetMethod().Module.Name は、実行ファイル名を返す。

などで、ズバリな方法が見つかりませんでした。


■背景

すでにお気づきだと思いますが、トレースに生かそうと考えています。トレースの目的からすれば他の方法がいくらでもあると思いますが、今回は技術的な興味も含んでいるので、代替方法ではなくズバリな方法を探しています。


■開発環境

WindowsXP Pro
VB2005(VisualStudio2005)
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2007-07-27 11:42
引用:

自分で書いたモジュール内で、Module キーワードで定義されたモジュール名を取得する方法を模索しています。
Module hogehoge
Public Sub hogeFunc()
  'ここで "hogehoge" という文字列を取得したい
End Sub
End Module


リフレクション
http://msdn2.microsoft.com/ja-jp/library/cxz4wk15(VS.80).aspx
DOBON.NETさん−「Tips」−「リフレクション」
http://dobon.net/vb/

一応、仕組みの性質から必要性、タイミングを考慮する必要があると思います。
今回の場合、場合によっては定数で記述したほうがよいという結論も十分ありえます。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-07-27 12:01
引用:

まどかさんの書き込み (2007-07-27 11:42) より:
引用:

自分で書いたモジュール内で、Module キーワードで定義されたモジュール名を取得する方法を模索しています。
Module hogehoge
Public Sub hogeFunc()
  'ここで "hogehoge" という文字列を取得したい
End Sub
End Module


リフレクション
http://msdn2.microsoft.com/ja-jp/library/cxz4wk15(VS.80).aspx
DOBON.NETさん−「Tips」−「リフレクション」
http://dobon.net/vb/

一応、仕組みの性質から必要性、タイミングを考慮する必要があると思います。
今回の場合、場合によっては定数で記述したほうがよいという結論も十分ありえます。


ごめん。この回答の意味と必要性がわからない。
どうやったら取得できるっていうの?

質問者はトレースに利用するとはっきり書いている。
で同じコードでアスペクトにやりたいんだろう。
リフレクションを使うにしても型名を動的に取る方法がないのだから無意味である。
っていうか質問者はその前提で質問しているようにしか思えないのだが。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-07-27 12:07
exception要らないよ
vb2003 で確認

stackframe取って、getmethodして、refrectedtype取って、name


リリースモードも確認しました


[ メッセージ編集済み 編集者: Jitta 編集日時 2007-07-27 12:14 ]
まったけ
会議室デビュー日: 2006/09/08
投稿数: 13
投稿日時: 2007-07-27 12:08
質問者のまったけです。

すみません、「試したこと」に Reflection が抜けていました。<(_ _)>

Reflection.MethodBase.GetCurrentMethod.Name で取得できたのは "hogeFunc" です。今回欲しいのは "hogehoge" なのです、、、、。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-07-27 12:11
gdgdになりかけていますね。

コード:

    Public Module HogeHoge

        Public Sub Func()
            Dim methodBase As System.Reflection.MethodBase = System.Reflection.MethodBase.GetCurrentMethod()
            Dim thisMethod As String = methodBase.DeclaringType.Name & "." & methodBase.Name

            MessageBox.Show(thisMethod)
        End Sub

    End Module


まったけさんの試したことはほとんど正解に近いです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-07-27 12:13
ごめん。超ごめん。俺が勘違いしていた。○| ̄|_
まったけ
会議室デビュー日: 2006/09/08
投稿数: 13
投稿日時: 2007-07-27 12:37
皆さん、ありがとうございます。


■Jitta 様
StackFrame( True ).GetMethod().ReflectedType.Name
で取得できました。
リリースモードでの確認までしていただき、ありがとうございます。


■じゃんぬねっと様
教えていただいたコードで取得できました。
二度手間をおかけしてしまい、申し訳なく思います。すみませんでした。

スキルアップ/キャリアアップ(JOB@IT)