2009-10-30 3 views
0

i besoin équivalent C# codeQuelqu'un peut-il trouver l'équivalent du code C#

VssSdkClientId VSS_SDK_SPEC startVssSdkClientEcho(const VssSdkXChar *host, 
                 const VssSdkPort port, 
                 NotifyFunc &notifyFunc, 
                 const eProtocolType protocolType, 
                 bool doIcmpEchoRequest = true); 

ceci est mon code C++ SDK .... ici j'ai besoin d'importer cette interface et la nécessité d'effectuer une opération

[DllImport("VssSdkd")] 
    public static extern void startVssSdkClientEcho(StringBuilder IpAddress, long port, ? ,eProtocolType proType, bool Req); 

notifyFunc & notifyFunc -> ici je dois implemet la une fonction de rappel, il doit appeler la fonction comme

myNotifyFunc(enumType notificationType, void *data) 
{ 

} 

dans C# "void * data" n'est pas disponible comment faire ceci ... hepl moi les gars ... merci d'avance

Répondre

0

Pour une fonction de rappel, vous pouvez passer une référence à un délégué et P/Invoke dirigera le rappel vers votre délégué. Voir le ceci example.

Pour le paramètre void * qui serait mieux traduit en IntPtr qui a toujours la même taille qu'un pointeur. Si vous devez récupérer les données à partir de ce pointeur, vous pouvez utiliser l'une des méthodes du System.Runtime.InteropServices.Marshal.

Donc, pour votre exemple:

public delegate void NotifyFunc(enumType notificationType, IntPtr data); 

[DllImport("VssSdkd")] 
public static extern void startVssSdkClientEcho(string IpAddress, 
    long port, NotifyFunc notifyFunc, eProtocolType proType, bool Req); 

Notez que IpAddress peut être une chaîne. Il ne devrait être un StringBuilder que si le code appelant l'a modifié et l'a renvoyé. Puisque le prototype C++ le liste comme un const char *, il ne changera pas la chaîne.

+0

salut shf301 ..... NotifyFunc callc = nouveau NotifyFunc (Callbacks); ceci est dele startVssSdkClientEcho (0.0.0.0, 00, callc, siss, faux); cela appelle le plaisir Callbackas (type eNotificationType, les données IntPtr) {} Ceci est mon appelé plaisir est-il exact qu'il est donne une erreur msg –

+0

Ceci est mon erreur Durée Échec de la vérification # 0 - la valeur si ESP était pas correctement enregistré à travers un appel de fonction . ceci est généralement le résultat de appelant une fonction déclarée avec une convention d'appel avec un pointeur de fonction déclaré avec une convention d'appel différente –

0

Je ne suis pas un expert en matière d'interopérabilité C++, donc je ne peux pas répondre votre question directement. Cependant, je vous suggère de regarder pinvoke.net. Il existe de nombreux exemples d'utilisation correcte de l'API Windows à partir du code managé. Cela peut être assez d'information pour vous aider à déterminer ce qui serait approprié pour votre fonction.

Questions connexes