1

我正在尝试使用以下方法在 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”,我认为这是字符串类型的不兼容。尽管尝试了不同的编组行为,但几天后我仍然陷入困境。

4

1 回答 1

1

Windows CE 中的字符串类型是 Unicode,因此声明 asString应该是正确的。

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

'W' 表示函数的一个 Wide(如宽字符或 Unicode)实现。一般来说,您可以dumpbin在 Visual Studio 命令提示符下使用该工具来识别函数导出的名称,在这种情况下,我曾经dumpbin /exports coredll.dll检查过。

另外,据我所知,在 VB.NetLong中是 64 位类型,并且FindFirstChangeNotification需要 32 位参数。

所以试试这个:

Private Declare Function FindFirstChangeNotificationW Lib "coredll.dll" _
(ByVal lpPathName As String, ByVal bWatchSubtree As Integer, _
ByVal dwNotifyFilter As Integer) As Integer
于 2015-12-04T01:15:40.643 回答