Saya mengalami masalah menarik saat menggunakan pinvoke di C# untuk memanggil _snwprintf. Ini berfungsi untuk tipe integer, tetapi tidak untuk bilangan floating point.
Ini pada Windows 64-bit, berfungsi dengan baik pada 32-bit.
Kode saya di bawah, harap diingat bahwa ini adalah contoh yang dibuat untuk menunjukkan perilaku yang saya lihat.
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();
}
}
Output dari program ini adalah
0.0
1
Seharusnya mencetak 1,0 pada baris pertama dan bukan 0,0, dan sejauh ini saya bingung.