Ich habe eine C++ - DLL, die ich möchte von C# -Code aufrufen. Ich kann eine Funktion aufrufen, aber die andere löst eine Ausnahme aus, wenn der C# -Code versucht, die DLL zu laden.Exportieren von Funktionen von C++ - DLL zu C# P/Invoke
Der Header sieht wie folgt aus: (? Was bedeutet foo = foo im Namensfeld bedeuten)
extern "C" __declspec(dllexport) BOOL Install();
extern "C" __declspec(dllexport) BOOL PPPConnect();
Dieses eine DLL mit etwas verwirrend Exporte Tabelle erzeugt:
File Type: DLL
Section contains the following exports for PPPManager.dll
00000000 characteristics
499F44F0 time date stamp Fri Feb 20 16:04:00 2009
0.00 version
1 ordinal base
2 number of functions
2 number of names
ordinal hint RVA name
1 0 000078E4 Install = Install
2 1 000079DC PPPConnect = PPPConnect
My P/Aufrufen Deklarationen sehen wie folgt aus:
[DllImport("PPPManager.dll")]
private static extern bool Install();
[DllImport("PPPManager.dll")]
private static extern bool PPPConnect();
Der Aufruf der Installation wird ohne Ausnahme zurückgegeben, aber wenn ich PPPConnec aufrufen t, bekomme ich eine MissingMethodException - "Kann einen Einstiegspunkt 'PPPConnect' in einer PInvoke DLL 'PPPManager.dll' nicht finden."
Ich habe versucht, entfernen Sie die externen und declspec-Anweisungen von der Funktion Deklaration installieren, so dass PPPConnect ist die einzige Funktion exportiert, und dies lässt mich PPPConnect immer noch nicht aufrufen.
Ich habe auch versucht, die DllImport von Ordnungszahl; Dies führt zu dem gleichen Ergebnis wie das Aufrufen des Namens - Install returns, aber PPPConnect löst die Ausnahme "Kann keinen Einstiegspunkt finden" # 2 '... "aus.
Der Interop-Protokoll gibt:
[pinvokeimpl][preservesig]
bool invivodata.Common.System.IPAQUtils::Install();
BOOLEAN (I1_WINBOOL_VAL) Install();
JIT ERROR FOR PINVOKE METHOD (Managed -> Native):
[pinvokeimpl][preservesig]
bool invivodata.Common.System.IPAQUtils::PPPConnect();
BOOLEAN (I1_WINBOOL_VAL) PPPConnect();
Dies ist auch außerhalb mein Fachgebiet, so irgendwelche Vorschläge oder Gedanken zu begrüßen wäre.
Danke, Paul
edit: Es stellt sich heraus, dass dieser Code funktioniert; Das Problem bestand darin, dass die neueste DLL nicht auf das Gerät übertragen wurde. Oh!
Ich habe noch nie von diesem Interop-Protokoll gehört - wie kann man aktivieren/das ansehen? – Charlie
http://blogs.msdn.com/netcfteam/archive/2005/07/24/442609.aspx Ich habe gerade angefangen, es zu verwenden, um dieses Problem zu debuggen und zu versuchen, aber es scheint, als hätte es mir eine Menge gerettet Zeit Debugging MissingMethodExceptions. – Symmetric