Wenn dies Ihr erster Besuch hier ist,
lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen
durch. Sie müssen sich vermutlich registrieren,
bevor Sie Beiträge verfassen können. Klicken Sie oben auf 'Registrieren', um den Registrierungsprozess zu
starten. Sie können auch jetzt schon Beiträge lesen. Suchen Sie sich einfach das Forum aus, das Sie am meisten
interessiert.
das kommt darauf an, was in dieser DLL drin ist. Im Fall einer "echten" DLL (die Funktionen über die Exporttabelle bereitstellt) ist der Zugriff über P/Invoke (Attribut <b>DllImport</b>) der richtige Weg:
<pre>
[DllImport("user32.dll")]
extern static int MessageBox(int hWnd, string sMsg, string sTitel, int iFlags);
private void button2_Click(object sender, System.EventArgs e)
{
MessageBox(0, "Message", "Title", 0);
}
</pre>
Wenn sich in der DLL allerdings ein COM-Objekt (In-Process-Server) verbirgt, wird der <i>Runtime Callable Wrapper</i> (RCW) benötigt. Dieser Wrapper wird beim Einbinden des COM-Objekts in Visual Studio .NET automatisch generiert, aber auch das Tool <i>tlbimp.exe</i> aus dem .NET Framework SDK führt zum gleichen Ziel
hab ich verstanden hat auch soweit funktioniert, nur bekomme ich beim einbinden meiner DLL folgende Fehlermeldung :
Zusätzliche Informationen: Der Einstiegspunkt 'ReadSketchFile' wurde nicht in der DLL isislib.dll gefunden.
Die Methode gibt es !! Der Objektbrowser, zeigt mir allerdings die DLL als interface an !! Ist das korrekt oder was stimmt da nicht ?
In diesem Fall gehe ich davon aus, dass sich hinter der DLL ein COM-Objekt verbirgt, dass alle Methoden nur über das Interface veröffentlicht, aber nicht über die Exporttabelle. Um diese "DLL" in C# nutzen zu können, muss man in VS.NET im Solution Explorer eine Reference auf das COM-Objekt hinzugfügen. VS.NET sorgt dann im Hintergrund automatisch dafür, dass die .NET-Wrapper-Klassen generiert werden, so dass ab diesem Zeitpunkt der Zugriff wie gehabt erfolgen kann
Comment