C# 从C中调用StrFormatByteSize64函数#
如何从C#中从Win API调用StrFormatByteSize64函数?我正在尝试以下代码,但没有成功:C# 从C中调用StrFormatByteSize64函数#,c#,winapi,C#,Winapi,如何从C#中从Win API调用StrFormatByteSize64函数?我正在尝试以下代码,但没有成功: [DllImport("shlwapi.dll")] static extern void StrFormatByteSize64(ulong qdw, char[] pszBuf, uint cchBuf); char[] temp = new char[128]; ulong size = 2000; StrFormatByteSize64(size, temp, 128); Co
[DllImport("shlwapi.dll")]
static extern void StrFormatByteSize64(ulong qdw, char[] pszBuf, uint cchBuf);
char[] temp = new char[128];
ulong size = 2000;
StrFormatByteSize64(size, temp, 128);
Console.WriteLine(temp);
函数的文档可在此处找到:
谢谢大家! 尽管这可能不是最干净的方式,但这是可行的:
using System;
using System.Runtime.InteropServices;
using System.Text;
public class Test
{
[DllImport("shlwapi.dll")]
static extern void StrFormatByteSize64(ulong qdw, StringBuilder builder,
uint cchBuf);
static void Main()
{
ulong size = 2000;
StringBuilder builder = new StringBuilder(128);
StrFormatByteSize64(size, builder, builder.Capacity);
Console.WriteLine(builder);
}
}
恐怕我对互操作知之甚少-例如,您可能不需要指定
StringBuilder
的初始容量。我不确定:(无论如何,它应该为您提供进一步调查的起点。尝试在char[]
之前添加[Out]
编辑: 我不敢相信我没有更早地注意到这一点,但另一个问题是您的函数不是
void
!它返回一个指针。如果希望它工作,您可能需要修复它。:)
尝试将ref关键字添加到pszBuf参数。静态外部无效标准格式字节64(ulong qdw,参考字符[]pszBuf,uint cchBuf)。。。纳米。。这不起作用。@gbogumil:它通过引用而不是内容传递指向数组的指针。谢谢!它工作得很好。最后是一个很好的解决方案,将字节转换为其他内存单元,如KB、MB、GB。。。我将进一步研究StringBuilder类的问题代码>国际海事组织。
[DllImport("shlwapi.dll")]
static extern IntPtr StrFormatByteSize64(long qdw, [In] StringBuilder pszBuf,
uint cchBuf);
//...
ulong num = 10000000;
var sb = new StringBuilder(1024);
if (StrFormatByteSize64(num, sb, (uint)sb.Capacity) != IntPtr.Zero)
{
//Conversion successful... do stuff
}