Exportieren von Funktionen aus C++ dll in C# P/Invoke

Ich gebaut habe eine C++ dll, die ich nennen möchte aus C# - code. Ich bin in der Lage, rufen Sie eine Funktion auf, aber der andere wirft eine Ausnahme, wenn der C# - code versucht, um die dll zu laden.

Den header sieht wie folgt aus:

extern "C" __declspec(dllexport) BOOL Install();
extern "C" __declspec(dllexport) BOOL PPPConnect();

Dies erzeugt eine dll mit ein bisschen verwirrend Exporte Tabelle (was bedeutet foo = foo bedeuten, in das Feld name ein?):

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

Mein P/Invoke-Deklarationen wie folgt Aussehen:

[DllImport("PPPManager.dll")]
private static extern bool Install();

[DllImport("PPPManager.dll")]
private static extern bool PPPConnect();

Den Anruf zu Installieren gibt keine Ausnahme, aber wenn ich Anrufe, PPPConnect, bekomme ich eine MissingMethodException - "nicht finden Können, ein Einstieg PPPConnect' in ein PInvoke-DLL "PPPManager.dll'."

Ich habe versucht, das entfernen der extern-und declspec Richtlinien aus dem Install-Funktion-Deklaration, so dass PPPConnect ist die einzige Funktion exportiert, und diese immer noch nicht lassen Sie mich rufen Sie PPPConnect.

Habe ich auch versucht dabei die DllImport durch Ordnungszahlen; das gibt das gleiche Ergebnis wie der Aufruf von name - Installation gibt, aber PPPConnect wirft die exception "Kann nicht gefunden" Entry Point '#2'...".

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, also, irgendwelche Vorschläge oder Anregungen wäre willkommen.

Dank,
Paul

Bearbeiten:
Es stellt sich heraus, dass dieser code funktioniert; das problem wurde mit der neuesten dll nicht weitergegeben wird an das Gerät. D ' Oh!

  • Ich habe noch nie gehört von dieser interop-log - wie macht man das aktivieren/anzeigen, die?
  • blogs.msdn.com/netcfteam/archive/2005/07/24/442609.aspx ich begann, es zu benutzen, um zu versuchen und zu Debuggen dieses problem, aber es scheint, es würde gespeichert haben mir viel Zeit zum Debuggen MissingMethodExceptions.
InformationsquelleAutor Symmetric | 2009-02-21
Schreibe einen Kommentar