从WindowsPhone 8.1调用GetDiskFreeSpaceExW api

时间:2016-06-15 10:39:08

标签: c# winapi windows-phone-8.1 pinvoke

我试图在我的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。

我在这里缺少什么?

2 个答案:

答案 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所述:)