Hallo zusammen,
ich möchte eine C++ DLL in meinem Code einbinden.
Ich habe die DLL mit dependencywalker durchgeschaut und die definition der auzurufunden Funktion lautet:
int execCommand(char *,char *,char *,int,char *,int)
Also deklariere ich die Funktion, bei mir, wie folgt:
[DllImport("C:\\Programme\\nsuite\\nsuitesig\\nsuitesigAPIDLL.dll", EntryPoint = "execCommand")]
public static extern int execCommand(string arg1, string arg2, string importData, int importSize, string exportData, int exportSize);
Beim Aufrug der Funktion bekomme ich aber folgende Fehlermeldung:
Der Einstiegspunkt execCommand wurde nicht in der DLL C:\Programme\nsuite\nsuitesig\nsuitesigAPIDLL.dll gefunden.
Woran liegt denn das? Stimmt vielleicht der zu übergebende Datentyp nicht?
Vielleicht sind die Namen dekoriert und du hattest im Dependency Walker die entsprechende Funktion zum Undekorieren aktiviert. Alternativ kannst du ja mit der Ordinalzahl anstelle des Namens arbeiten.
Die Signatur kann total falsch sein; das kann bei Laden Auffinden des Funktionszeigers nicht festgestellt werden (das geht einfach nur über Name oder Zahl). Ob die Signatur stimmt, kann man erst wissen, wenn man die Funktion erfolgreich aufrufen kann.
Super! Vielen Dank für den Tip!
Mit Ordinalzahl geht es jetzt:
[DllImport("C:\\Programme\\nsuite\\nsuitesig\\nsuitesigAPIDLL.dll", EntryPoint = "#1")]
public static extern int execCommand(String arg1, String arg2, String importData, int importSize, String exportData, int exportSize);