2015-12-03 5 views
1

Je suis en train de faire un appel à l'appel API Windows CE 5, « FindFirstChangeNotification » dans un projet Smart Device VS2008 utilisant:chaîne Problème passer à LPCTSTR dans WinCE5 API appel

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) 

Essayer cette méthode conduit à une "System.NotSupportedException" que je suppose être une incompatibilité dans les types de chaînes. Malgré les différents comportements de marshaling, je suis toujours coincé après plusieurs jours.

Répondre

1

Les types de chaîne dans Windows CE sont Unicode. Par conséquent, la déclaration String doit être correcte. Corelll exporte en fait la fonction sous la forme FindFirstChangeNotificationW (remarquez la fin du 'W'), c'est probablement la raison pour laquelle vous obtenez une exception. 'W' indique une implémentation large, comme dans les caractères larges ou Unicode, de la fonction. Généralement, vous pouvez utiliser l'outil dumpbin dans une invite de commande Visual Studio pour identifier les noms des exportations de fonctions, dans ce cas j'ai utilisé dumpbin /exports coredll.dll pour vérifier.

Aussi, autant que je sache, dans VB.Net Long est un type de 64 bits, et FindFirstChangeNotification s'attend à des arguments de 32 bits.

Donc, essayez ceci:

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

Merci pour la réponse! C'était le problème. – GSHinks