質問

これは、DLL内のすべての機能の存在を列挙することは可能ですか?どのようにその署名を得ることについて? 私はC#でこれを行うことができますか?それとも私はこれを行うには、低レベルを行かなければならないのですか?

よろしくとTKS、 ホセ

役に立ちましたか?

解決

それは、.NET DLL レッドゲートのリフレクターなら

には、一覧表示することができますでも、メソッドやコードを分解しようとします。これは、任意の開発者のツールボックスのための偉大なアイテムだと、それは無料です。

編集を使用すると、実行時の型とメソッドを読み取ろうとしている場合は、リフレクションを使用することをお勧めします。あなたはAssemblyGetExportedTypesをロードする必要があります。その後、MembersMethodsPropertiesを反復処理します。ここでを反復処理の例を持っている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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top