【发布时间】:2011-04-27 09:19:00
【问题描述】:
以下代码(调用 proc DiskFreeSpace)会引发“堆栈不平衡”错误消息。
Private Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias "GetDiskFreeSpaceExA" (ByVal lpDirectoryName As String, _
ByVal lpFreeBytesAvailableToCaller As Long, _
ByVal lpTotalNumberOfBytes As Long, _
ByVal lpTotalNumberOfFreeBytes As Long) As Long
Friend Shared Function DiskFreeSpace(ByVal sdirDrive As String) As Long
Dim Status As Long
Dim TotalBytes As Long
Dim FreeBytes As Long
Dim BytesAvailableToCaller As Long
Status = GetDiskFreeSpaceEx(sdirDrive, BytesAvailableToCaller, TotalBytes, FreeBytes)
Return FreeBytes
End Function
这里有什么问题?
确切的错误信息是:
调用 PInvoke 函数 '测试!XYZ.Test.FN.MyFileSystem::GetDiskFreeSpaceEx' 使堆栈不平衡。这是 可能是因为托管的 PInvoke 签名与非托管的不匹配 目标签名。检查 调用约定和参数 PInvoke 签名匹配目标 非托管签名。
附加说明:我的函数确实需要也适用于 UNC 路径(本地和/或网络)。
【问题讨论】:
-
这段代码甚至不应该编译!开启
Option Strict! -
@Konrad:我同意,但我总是将 Option Strict 设置为 On!它编译没有任何错误。
-
我的错。我没有看到 WinAPI 函数声明中的第一个参数,并假设第一个参数的类型是
Long。而且由于您将sdirDrive作为第一个参数传递,因此无法正常工作。