בעית עברית בקריאת 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)


 

בא תתחבר לדף היומי!