在 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
我正在尝试在 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