Laden...

Zugriff auf DLL

Erstellt von CF123 vor 18 Jahren Letzter Beitrag vor 18 Jahren 4.094 Views
C
CF123 Themenstarter:in
38 Beiträge seit 2005
vor 18 Jahren
Zugriff auf DLL

Moin!
möchte auf die Methoden einer com-DLL zugreifen, hab aber keine informationen über deren inhalt. was kann man da machen?
danke schonmal!

C
192 Beiträge seit 2005
vor 18 Jahren

Probiere mal


Assemby a = Assembly.LoadFile("c:\meine.dll");
Type [] types = a.getTypes();

// Methodenaufruf:  (Alles per Reflection)
MethodInfo mi = types[0].getMethod("doIt");
mi.Invoke(null,null);

// Liste alle Methoden
MethodInfo [] mis = types[0].getMethods();
foreach(MethodInfo info in mis)
{
   Console.WriteLine(info.Name);
}

Naja, so funktioniert es mit Assemblies, die mit .NET programmiert wurden.
Probiers mal aus, sag mir dann aber ob es geklappt hat

N
4.644 Beiträge seit 2004
vor 18 Jahren

@CF123
Such mal im Forum nach "COM dll".

C
CF123 Themenstarter:in
38 Beiträge seit 2005
vor 18 Jahren

@cmpxchg:

geht anscheinend nur mit .net dlls, schmeißt einen fehler: falsches format!

S
8.746 Beiträge seit 2005
vor 18 Jahren

Du hast zwei Möglichkeiten:

  1. Statisches Binden. Dazu fügst du der Komponentenleiste einen neuen Eintrag hinzu. In dem folgende Dialog gehst du auf den COM-Reiter und wählst deine Klasse aus. Nun wird ein COM-Wrapper erstellt und in das Projekt einebunden. Du kannst die erstellte Klase genauso nutzen wie eine .NET-Klasse. Sie gibt somit auch Auskunft über ihre Methoden un Properties (Klassenexplorer oder Intellisense).

  2. Dynamisches Binden zur Laufzeit. Hier musst du allerding "wissen" wie die Methoden und Properties heissen. Über einen COMInspector aber leicht rauszufinden: COM-Objekte sind selbtsbeschreibend.

Es gibt noch die Möglichkeit beides zu kombinieren... isrt aber komplex und läuft über Codegenerierung zur Laufzeit.

C
CF123 Themenstarter:in
38 Beiträge seit 2005
vor 18 Jahren

die erste möglichkeit funktioniert soweit, aber was ist ein COMInspector
nutze übrigens sharpdevelop und hab die com-dll über referenz hinzufügen eingefügt!

C
CF123 Themenstarter:in
38 Beiträge seit 2005
vor 18 Jahren

noch eine frage:
wie importiere ich nicht statische methoden. beim dllimport wird ja static extern erwartet.
und wie kann ich über DllImport einen konstruktor aus einer com-dll importieren.

ich bedanke mich schonmal für die hilfe!
bin schon ein gutes stück weitergekommen!!!

S
8.746 Beiträge seit 2005
vor 18 Jahren

Mittels DLLImport geht das nicht. Einzige Möglichkeit ist die Erstellung eines managed C++-Wrappers.

P
939 Beiträge seit 2003
vor 18 Jahren

Mit dem ComImport-Attribut kann man es machen.

Hier hatte ich ein Beispiel gepostet:
ActiveX ohne Verweis

Einfacher ist es aber in der IDE oder mit TlbImp.exe eine Wrapper-DLL generieren zu lassen, so wie svenson es vorschlägt und wie du es auch schon gemacht hast -> Referenz aus COM einbinden. Es wird der gleiche Code generiert, den man sonst per Hand schreiben müsste.

Gruss
Pulpapex

S
8.746 Beiträge seit 2005
vor 18 Jahren

Hups, sorry, hatte die Frage nicht aufmerksam genug gelesen. Meine Antwort bezog sich auf C++-Klassen in nicht-COM-Dlls.

C
CF123 Themenstarter:in
38 Beiträge seit 2005
vor 18 Jahren

danke! funktioniert jetzt! wenn ich die com-dll über referenz hinzufügen einbinde, ist aber das verzeichnis fest, so dass bei installation immer der gleiche pfad benutzt werden muss. aber da eignet sich ja das system32 verzeichnis.
oder kann man die dll irgendwie einbinden und dabei einen bestimmten pfad festlegen wie im installationssetup gewünscht.