DLLに存在するすべての関数を列挙できますか?その署名を取得するのはどうですか? C#でこれを行うことはできますか?または、これを行うには低レベルに移動する必要がありますか?それは.NETのDLLならDLL関数を列挙していますか?
よろしくとTKS、 ホセ
DLLに存在するすべての関数を列挙できますか?その署名を取得するのはどうですか? C#でこれを行うことはできますか?または、これを行うには低レベルに移動する必要がありますか?それは.NETのDLLならDLL関数を列挙していますか?
よろしくとTKS、 ホセ
はRedGate's Reflectorは、メソッドの一覧を表示しても、コードを分解したりすることができます。どの開発者のツールボックスにも最適なアイテムです。無料です。
編集:実行時にタイプとメソッドを読み込もうとする場合は、Reflectionを使用します。 Assembly
とGetExportedTypes
をロードする必要があります。その後、Members
を介してMethods
とProperties
に繰り返します。以下は、MSDNの記事で、MemberInfo
の情報を反復する例です。また、ここにMSDN Magazineの記事Extracting Data from .NET Assembliesがあります。
最後に、ロードされたオブジェクトでメソッドを実行するために書いた、ちょっとしたテストメソッドです。この例では
ClassLibrary1のは、クラス1の1つのクラスを持っている:
public class Class1
{
public bool WasWorkDone { get; set; }
public void DoWork()
{
WasWorkDone = true;
}
}
そして、ここではテストです:
[TestMethod]
public void CanExecute_On_LoadedClass1()
{
// Load Assembly and Types
var assm = Assembly.LoadFile(@"C:\Lib\ClassLibrary1.dll");
var types = assm.GetExportedTypes();
// Get object type informaiton
var class1 = types.FirstOrDefault(t => t.Name == "Class1");
Assert.IsNotNull(class1);
var wasWorkDone = class1.GetProperty("WasWorkDone");
Assert.IsNotNull(wasWorkDone);
var doWork = class1.GetMethod("DoWork");
Assert.IsNotNull(doWork);
// Create Object
var class1Instance = Activator.CreateInstance(class1.UnderlyingSystemType);
// Do Work
bool wasDoneBeforeInvoking =
(bool)wasWorkDone.GetValue(class1Instance, null);
doWork.Invoke(class1Instance, null);
bool wasDoneAfterInvoking =
(bool)wasWorkDone.GetValue(class1Instance, null);
// Assert
Assert.IsFalse(wasDoneBeforeInvoking);
Assert.IsTrue(wasDoneAfterInvoking);
}
ありがとう!ネイティブDLL(アンマネージ)でどうすればいいですか? – user361526
あなたはどの、依存関係ウォーカーを使用してDLL内の輸出のすべてを見ることができますマイクロソフトからの無料プログラムです。http://en.wikipedia.org/wiki/Dependency_walker
通常のwin32 DLLについては、the Dumpbin utilityを参照してください。これはVisual C++に含まれています(私が信じる無料の "express"バージョンを含む)。
例:
c:\vc9\bin\dumpbin.exe /exports c:\windows\system32\kernel32.dll
そのマネージDLLの場合:使用反射
場合は、その管理対象外:あなたは
はあなたがunmanangedまたは管理対象のDLLについて話しているDLLのエクスポートテーブルを列挙する必要がありますか?実行時または設計時に – VVS
? –
私は実行時にprogrammaticalyしようとしている、彼らはアンマネージドまたは管理することができます – user361526