בעית עברית בקריאת DLL
-
C#
אני משתמש במתודה OpenPrinter.[DllImport("winspool.Drv", EntryPoint = "OpenPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] private static extern bool OpenPrinter([MarshalAs(UnmanagedType.LPStr)] string szPrinter, out IntPtr hPrinter, IntPtr pDefault); //ref PRINTER_DEFAULTS pd);
זה עובד נפלא, אך כשאני מנסה לפתוח מדפסת עם שם בעברית זה נכשל (שגיאה 1801 : Printer_name_invalid).
זה קורה רק שאני על משתמש באנגלית. אם המשתמש בעברית זה עובד רגיל.
מה אפשר לעשות?
ניסיתי לשנות את ה charset ל -unicode אך לא עוזר.בנוסף, האם יש דרך לשנות את השפה של כל התהליך לעברית? אולי זה יעזור.
-
הפתרון הוא להשתמש בגירסת הunicode של הפונקציה.
[DllImport("winspool.Drv", EntryPoint = "OpenPrinterW", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] public static extern bool OpenPrinter([MarshalAs(UnmanagedType.LPWStr)] string szPrinter, out IntPtr hPrinter, IntPtr pDefault); //ref PRINTER_DEFAULTS pd);
(שינו לב לשינוי בין LPWStr ל LPStr)