Warum schlägt dieser Aufruf von AddDllDirectory mit "Parameter ist falsch" fehl?

7

Warum funktioniert der folgende Code nicht?

%Vor%     
mavnn 08.08.2013, 13:30
quelle

3 Antworten

15

AddDllDirectory () ist ein sehr neuer Zusatz zum winapi. Es ist nur garantiert in Windows 8 verfügbar sein, erfordert es ein Update, KB2533623. Behalten Sie dies im Hinterkopf, wenn Sie Ihre Produktanforderungen auswählen.

Es ist in mehr als einer Hinsicht ungewöhnlich, es folgt nicht dem normalen Muster für Winapi-Funktionen, die eine Zeichenkette akzeptieren. Dies macht die Funktion in zwei Versionen verfügbar, in der ANSI-Version mit angehängtem A und in der Unicode-Version mit angehängtem W. AddDllDirectory () hat keinen angehängten Buchstaben, nur die Unicode-Version existiert. Es ist mir nicht klar, ob das beabsichtigt war oder ein Versehen, mit hohen Wahrscheinlichkeiten. Die Funktionsdeklaration fehlt in den Windows 8 SDK-Headern, was sehr ungewöhnlich ist.

Ihre ursprüngliche Deklaration ist fehlgeschlagen, weil Sie die Unicode-Version aufgerufen haben, aber der Pinvoke-Marshaller eine ANSI-Zeichenfolge übergeben hat. Sie haben wahrscheinlich Glück gehabt, weil die Zeichenkette eine ungerade Anzahl von Zeichen mit genügend glücklichen Nullen hatte, um keine AccessViolation zu verursachen.

Das Verwenden der CharSet-Eigenschaft in der [DllImport] -Deklaration ist erforderlich, damit der pinvoke-Marshaller eine Unicode-Zeichenfolge übergibt.

    
Hans Passant 08.08.2013, 13:53
quelle
7

Sie müssen angeben, dass Unicode im DllImport-Attribut verwendet wird,

%Vor%     
John Reynolds 08.08.2013 13:42
quelle
2

Nach einigen Experimenten scheint das Folgende zu funktionieren:

%Vor%     
mavnn 08.08.2013 13:40
quelle

Tags und Links