ฉันมีปัญหาที่น่าสนใจกับการใช้ pinvoid ใน C# เพื่อโทร _snwprintf ใช้งานได้กับประเภทจำนวนเต็ม แต่ไม่ใช่กับตัวเลขทศนิยม
นี่คือบน Windows 64 บิต มันทำงานได้ดีบน 32 บิต
รหัสของฉันอยู่ด้านล่าง โปรดจำไว้ว่านี่เป็นตัวอย่างที่สร้างสรรค์เพื่อแสดงพฤติกรรมที่ฉันเห็น
class Program
{
[DllImport("msvcrt.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
private static extern int _snwprintf([MarshalAs(UnmanagedType.LPWStr)] StringBuilder str, IntPtr length, String format, int p);
[DllImport("msvcrt.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
private static extern int _snwprintf([MarshalAs(UnmanagedType.LPWStr)] StringBuilder str, IntPtr length, String format, double p);
static void Main(string[] args)
{
Double d = 1.0f;
Int32 i = 1;
Object o = (object)d;
StringBuilder str = new StringBuilder(32);
_snwprintf(str, (IntPtr)str.Capacity, "%10.1lf", (Double)o);
Console.WriteLine(str.ToString());
o = (object)i;
_snwprintf(str, (IntPtr)str.Capacity, "%10d", (Int32)o);
Console.WriteLine(str.ToString());
Console.ReadKey();
}
}
ผลลัพธ์ของโปรแกรมนี้ก็คือ
0.0
1
ควรพิมพ์ 1.0 ในบรรทัดแรกไม่ใช่ 0.0 และจนถึงตอนนี้ฉันก็นิ่งงัน