DllImport - ANSI vs. Unicode

Habe ich einige Fragen über die möglichen Antworten für die test-Frage unten:

Frage: schreiben Sie den folgenden code-segment zum aufrufen einer Funktion aus der Win32-API (Application Programming Interface) durch die Verwendung von platform invoke.

string personName = "N?el";
string msg = "Welcome" + personName + "to club"!";
bool rc = User32API.MessageBox(0, msg, personName, 0);

Müssen Sie definieren, einen Prototyp-Methode, die am besten Marschall der string-Daten. Welche code-segment sollten Sie verwenden?

//A.
[DllImport("user32", CharSet = CharSet.Ansi)]
public static extern bool MessageBox(int hWnd, string text, string caption, uint type);
}

//B.
[DllImport("user32", EntryPoint = "MessageBoxA", CharSet = CharSet.Ansi)]
public static extern bool MessageBox(int hWnd,
[MarshalAs(UnmanagedType.LPWStr)]string text,
[MarshalAs(UnmanagedType.LPWStr)]string caption, uint type);
}

//C. - Correct answer
[DllImport("user32", CharSet = CharSet.Unicode)]
public static extern bool MessageBox(int hWnd, string text, string caption, uint type);
}

//D.
[DllImport("user32", EntryPoint = "MessageBoxA", CharSet = CharSet.Unicode)]
public static extern bool MessageBox(int hWnd,
[MarshalAs(UnmanagedType.LPWStr)]string text,
[MarshalAs(UnmanagedType.LPWStr)]string caption,
uint type);
}

Warum genau ist die richtige Antwort C? Konnte es nicht genauso gut gewesen? Der einzige Unterschied ist, dass es ANSI anstelle von Unicode.

Ich verstehe, dass es nicht D, weil wir wählen Sie Unicode als Zeichensatz und haben dann eine ANSI-Funktion als entrypoint.

Warum dann nicht B arbeiten?

Schreibe einen Kommentar