2016-07-19 7 views
0

Von einer .Net CF 3.5-Anwendung versuche ich PInvoice die 'i2csdk.dll', die sich im Verzeichnis \ Windows auf meinem Windows CE 7-Gerät befindet. Wenn ich versuche, den PInvoke auszuführen, erhalte ich eine 'System.MissingMethodException' mit zusätzlichen Informationen. PInvoke DLL 'i2csdk.dll' kann nicht gefunden werden. Die PInvoke jeder Funktion von coredll.dll und ceddk.dll funktionieren gut, die beide im Verzeichnis \ Windows neben i2csdk.dll befinden.Win CE DLL Import von Windows wirft MissingMethodException

Ich habe überprüft, dass i2csdk.dll tatsächlich in \ Windows während der Laufzeit vorhanden ist.

Ich weiß auch die DLL i2csdk.dll ist korrekt kompiliert, denn wenn ich die i2csdk.dll in das gleiche Verzeichnis wie meine App kopieren, ist der Aufruf erfolgreich. Das sagt mir auch, dass diese DLL nicht von einer anderen DLL abhängig ist.

Fehle ich etwas? Gibt es einen DLL-Registrierungsschritt, der ausgeführt werden muss?

+1

Wer auch immer diese Frage markiert hat, füge bitte einen Kommentar hinzu, warum. Ich würde das Feedback schätzen. Es macht mir nichts aus, es umzuformulieren oder zu erklären. – Hawkez

Antwort

1

Sie können Dependency Walker verwenden, um zu sehen, welche Methoden aus dieser DLL exportiert werden. Wenn Sie sie selbst erstellen, können Sie die .def-Datei überprüfen. Wenn die DLL in C++ implementiert ist und Sie die Dllexport-Attribute verwenden, werden echte Funktionsnamen "gemangled", einige Dekorationen hinzufügen, die Überlastungen der gleichen Basisfunktion unterscheiden, geschieht dies nicht, wenn Sie die Funktion in einem externen "C "blockieren, und ich empfehle dringend def Datei zu verwenden, um falsche Exporte zu vermeiden. Wenn sich die DLL in Ihrem \ Windows-Ordner befindet, bedeutet dies normalerweise, dass sie Teil des Betriebssystemabbilds ist. Wenn sie als Kernelmodusmodul enthalten ist (mithilfe des K-Flags in der bib-Datei), können Sie nicht von einem Benutzermodus darauf zugreifen Anwendung.

+0

Vielen Dank für die Klarheit. Die DLL ist eine Systemdatei und sie ist im type-Abschnitt der bib-Datei mit einem K markiert, so dass es sich um Kernel-Space handelt. Das war das Problem. [Andere können hier mehr Informationen über die Bib-Datei sehen.] (Https://msdn.microsoft.com/en-us/library/ee479063.aspx) – Hawkez