2012-04-10 11 views
3

Zum Testen versuche ich, eine Delphi XE2 DLL (siehe Code) in einer C# -Anwendung aufzurufen (entwickelt in Visual C# 2010 Express).DELPHI XE2 DLL kann nicht zur C# -Anwendung hinzugefügt werden

procedure CLP; stdcall; export; 
begin 
    showmessage('TEST'); 
end; 

exports CLP; 

jedoch beim Versuch, die DLL als Verweis auf ein C# Projekt erscheint die folgende Meldung hinzufügen:

auf einer Referenz 'D: \ temp \ test.dll' kann nicht hinzugefügt werden. Bitte stellen Sie sicher, , dass die Datei zugänglich ist, und das ist eine gültige Assembly oder COM Komponente.

Wenn die gleiche DLL unter Delphi 2010 kompiliert wird, funktioniert es ohne jedes Problem.

Irgendwelche Vorschläge, wie man das Problem löst, werden geschätzt.

+3

Sie haben hier nie eine Antwort akzeptiert oder abgestimmt. Ich bitte höflich darum, dass Sie die [faq] lesen und etwas über diese wichtigen Teile von Stack Overflow erfahren. –

Antwort

6

Sie können einem .NET-Projekt keine nicht verwaltete DLL hinzufügen.

Aber Sie können die Funktionen importieren, siehe zum Beispiel Platform Invoke Tutorial

0

Henk ist richtig, und ich möchte ein paar Dinge hinzuzufügen.

Zuerst können Sie eine DLL nur hinzufügen, wenn es eine .NET-verwaltete DLL ist (die Assembly aufruft). Sie können jedoch nicht gemanagte Funktionen aus nicht verwalteten DLL- oder EXE-Dateien importieren. Also die richtige Frage ist, wie ich Funktionen von nicht verwalteten DLL importieren kann, und Sie sollten die Antwort dafür suchen. Und ich denke, die beste Startposition ist pinvoke Website.

3

Sie versuchen, eine Verbindung zu einer nicht verwalteten nativen DLL herzustellen. Sie können eine verwaltete Anwendung nicht als Referenz hinzufügen.

Die Art und Weise Ihre DLL rufen p/aufrufen zu verwenden ist:

[DllImport(@"test.dll", CallingConvention=CallingConvention.Stdcall)] 
static extern void CLP(); 

natürlich die Dinge ein wenig komplizierter, wenn Sie mit Parametern auf Ihre DLL starten, aber Sie können einen sehr langen Weg mit p gehen /aufrufen.

Eine Sache, auf die Sie achten müssen, ist, dass Ihr verwaltetes Projekt x86 anvisiert, wenn Ihre DLL 32 bit ist, oder x64, wenn Ihre DLL 64 bit ist.

Als eine letzte, kleinere, beachten Sie die Verwendung von export ist sinnlos in modernen Delphi. Sie sollten es einfach entfernen, da der Compiler es sowieso ignoriert.

+0

Danke für die Antworten. DLLImport hat den Job gemacht. – Mike

+0

David, ich bin mir sicher, dass Sie Recht haben, da Sie normalerweise sind :), aber geben Sie bitte einen Hinweis auf die Aussage über den Export, der sinnlos ist. Woher weiß der Compiler, welche Funktionen für den Import sichtbar sein sollen? –

+0

@VilleKrumlinde Die "exports" -Klausel bestimmt, welche Funktionen exportiert werden –

Verwandte Themen