2017-06-16 6 views
-3

Ich muss eine DLL verweisen, die nicht von mir in C# -Projekt erstellt wurde. Als ich versuchte, eine Referenz hinzuzufügen, erhalte ich den Fehler, dass die DLL nicht hinzugefügt werden konnte. Ich habe versucht, TlbImp.exe zu verwenden wie:Referenz C++ Dll in meinem Projekt

TlbImp.exe 'C:\\Desktop\PCMiler\pcmsrv64.dll' 

ich die Störung erhalte, dass die DLL keine gültige Bibliothek Typ ist.

Dann habe ich versucht

[DllImport("C:\\VSProjects\\PCMilerConnect\\pcmsrv64.dll")] 

Aber es hat nicht funktioniert. ich auch versucht:

regsvr32 'C:\\Desktop\PCMiler\pcmsrv64.dll' 

Und ich habe den Fehler, dass die DLL geladen wurde, aber der Einstiegspunkt wurde nicht gefunden. Was mache ich falsch?

+1

TblImp und regsvr32 sind für COM-DLLs, die dies nicht ist. Lesen Sie [fragen] und erklären Sie, wie Ihr DllImport nicht funktioniert. Für Anfänger sollten Sie einen relativen Pfad verwenden. – CodeCaster

+0

@Lio können Sie die Funktionsdeklaration zeigen, auf die Sie 'DllImport' anwenden? –

+1

Bitte PLZ und keine Screenshots! – Default

Antwort

1

Die Art und Weise versucht, es

[DllImport("C:\\VSProjects\\PCMilerConnect\\pcmsrv64.dll")] 

korrekt ist, aber wie die Fehlermeldung Zustände verwenden, müssen Sie einen Einstiegspunkt angeben. Was das bedeutet, ist, dass Sie, wenn die C++ Funktion, die Sie anrufen möchten, benannt DoFoo() Sie die DLL importieren müssen, wie mit der Funktion als Einstiegspunkt folgt:

[DllImport("C:\\VSProjects\\PCMilerConnect\\pcmsrv64.dll", EntryPoint="DoFoo")] 

Ein Einstiegspunkt der function name or ordinal ist. Siehe auch DllImport attribute documentation.

EDIT: Versuchen Sie, wenn dies für Sie arbeitet:

[DllImport("C:\\VSProjects\\PCMilerConnect\\pcmsrv64.dll", EntryPoint="PCMSLookup")] 
public static extern int PCMSLookup(Trip tripId, string placeName, int easyMatch); 

Vorausgesetzt, dass Sie auch eine Struktur Trip in C# genannt definiert haben, die die Seite C++ ähnelt Trip.

EDIT 2: Sie sagten, Sie haben keinen Zugriff auf die Signatur, so glaube ich, anstelle von Trip übergeben Sie wahrscheinlich eine int. Versuchen Sie Folgendes:

[DllImport("C:\\VSProjects\\PCMilerConnect\\pcmsrv64.dll", EntryPoint="PCMSLookup")] 
public static extern int PCMSLookup(int tripId, string placeName, int easyMatch); 
+0

Bist du dir sicher? Die Frage scheint darauf hinzuweisen, dass die Fehlermeldung, auf die Sie sich beziehen, war, wenn das OP regsvr32 verwendet, nicht wenn DllImport verwendet wird. Wenn ich DllImport benutzt habe, brauchte ich keinen 'EntryPoint'. – Default

+0

@Default Danke für das Aufräumen, ja, die Fehlermeldung über den Einstiegspunkt erschien scheinbar nur bei Verwendung von 'regsvr32', aber als OP nicht angegeben * was * Fehler er bekommt (" Ich habe es versucht, aber es hat nicht funktioniert ") Als ich' DllImport' probierte, dachte ich, vielleicht könnte es das auch sein. –

+0

Vielen Dank. Ich versuche, "PCMSLookup()" – Lio

Verwandte Themen