質問
これは、DLL内のすべての機能の存在を列挙することは可能ですか?どのようにその署名を得ることについて? 私はC#でこれを行うことができますか?それとも私はこれを行うには、低レベルを行かなければならないのですか?
よろしくとTKS、 ホセ
解決
には、一覧表示することができますでも、メソッドやコードを分解しようとします。これは、任意の開発者のツールボックスのための偉大なアイテムだと、それは無料です。
の編集を使用すると、実行時の型とメソッドを読み取ろうとしている場合は、リフレクションを使用することをお勧めします。あなたはAssembly
とGetExportedTypes
をロードする必要があります。その後、Members
とMethods
にProperties
を反復処理します。ここでを反復処理の例を持っているMSDNの記事です情報のMemberInfo
。また、ここでのMSDNマガジンの記事は 。
最後に、ここで私は、ロードされたオブジェクトのメソッドを実行するために書いた小さな試験方法はあります。
この例で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);
}
他のヒント
もしそのAマネージDLL:使用反射
その管理されていない場合:あなたはDLLのエクスポートテーブルを列挙する必要があります。
あなたがマイクロソフトから無料のプログラムですDependency Walkerのを、使用してDLL内の輸出のすべてを見ることができます:<のhref =「http://en.wikipedia.org/wiki/Dependency_walker」のrel = "nofollowをnoreferrer 「> http://en.wikipedia.org/wiki/Dependency_walker の
の正規のWin32のDLLについては、 DUMPBINユーティリティを参照してください。これは、(私は信じて自由に「表現」バージョンを含む)のVisual-C ++に含まれています。
例:
c:\vc9\bin\dumpbin.exe /exports c:\windows\system32\kernel32.dll