我试图在我的Windows Phone 8.1应用程序中调用GetDiskFreeSpaceExW Win Api调用,而且我总是没有通过认证。
此函数位于受支持的Win32 API列表中: https://msdn.microsoft.com/en-us/library/windows/apps/jj662956(v=vs.105).aspx#BKMK_ListofsupportedWin32APIs
我的电话:
[DllImport("api-ms-win-core-file-l1-2-0.dll", SetLastError = true)]
static extern bool GetDiskFreeSpaceEx(string lpDirectoryName,
out ulong lpFreeBytesAvailable,
out ulong lpTotalNumberOfBytes,
out ulong lpTotalNumberOfFreeBytes);
Erorr:
此应用程序类型不支持此API - API = GetDiskFreeSpaceEx。模块= API-MS-双赢的核心文件l1-2-0.dll。 文件= Glide.WindowsCommon.dll。
我在这里缺少什么?
答案 0 :(得分:3)
[DllImport("api-ms-win-core-file-l1-2-0.dll", SetLastError = true)]
static extern bool GetDiskFreeSpaceEx(string lpDirectoryName,
out ulong lpFreeBytesAvailable,
out ulong lpTotalNumberOfBytes,
out ulong lpTotalNumberOfFreeBytes);
由于您未指定CharSet
值,因此默认情况下会使用CharSet
CharSet.Ansi
进行编组。您应该像这样指定CharSet.Unicode
:
[DllImport("api-ms-win-core-file-l1-2-0.dll", CharSet = CharSet.Unicode,
SetLastError = true)]
static extern bool GetDiskFreeSpaceEx(...);
认证过程似乎还要求明确说明入口点名称:
[DllImport("api-ms-win-core-file-l1-2-0.dll", CharSet = CharSet.Unicode,
Entry point = "GetDiskFreeSpaceExW", SetLastError = true)]
static extern bool GetDiskFreeSpaceEx(...);
答案 1 :(得分:0)
这非常令人困惑,只需将函数名称从GetDiskFreeSpaceEx更改为GetDiskFreeSpaceExW工作(通过认证)+ CharSet = CharSet.Unicode,如@David Heffernan所述:)