在 WinCE5 API 调用中将字符串传递给 lpctstr 时遇到问题

Trouble passing string to lpctstr in WinCE5 API call

我正在尝试在 VS2008 智能设备项目中调用 Windows CE 5 API 调用“FindFirstChangeNotification”:

Private Declare Function FindFirstChangeNotification Lib "coredll.dll" _
(ByVal lpPathName As String, ByVal bWatchSubtree As Long, _
ByVal dwNotifyFilter As Long) As Long

Dim strFolderPath As String = "\My Documents\My App Files\"
Dim ptrHandle as IntPtr = FindFirstChangeNotification(strFolderPath, 0, 1)

尝试此方法会导致 "System.NotSupportedException",我认为这是字符串类型的不兼容。尽管尝试了不同的编组行为,几天后我仍然卡住了。

WindowsCE 中的字符串类型是 Unicode,因此声明为 String 应该是正确的。

Coredll 实际上将函数导出为 FindFirstChangeNotificationW(注意尾随 'W'),所以这可能是您遇到异常的原因。

'W' 表示 Wide,如宽字符或 Unicode,函数的实现。通常你可以在 Visual Studio 命令提示符下使用 dumpbin 工具来识别函数导出的名称,在这种情况下我使用 dumpbin /exports coredll.dll 来检查。

此外,据我所知,在 VB.Net 中,Long 是 64 位类型,而 FindFirstChangeNotification 需要 32 位参数。

所以试试这个:

Private Declare Function FindFirstChangeNotificationW Lib "coredll.dll" _
(ByVal lpPathName As String, ByVal bWatchSubtree As Integer, _
ByVal dwNotifyFilter As Integer) As Integer