我需要等效的c#代码
VssSdkClientId VSS_SDK_SPEC startVssSdkClientEcho(const VssSdkXChar *host,
const VssSdkPort port,
NotifyFunc ¬ifyFunc,
const eProtocolType protocolType,
bool doIcmpEchoRequest = true );
这是我的c ++ SDK代码....这里我需要导入这个界面并需要执行一些操作
[DllImport("VssSdkd")]
public static extern void startVssSdkClientEcho(StringBuilder IpAddress, long port, ? ,eProtocolType proType, bool Req);
NotifyFunc& notifyFunc - >在这里我需要实现一些应该调用函数的回调函数,如
myNotifyFunc( enumType notificationType, void *data)
{
}
在c#“void * data”中是无法实现的,如何能够实现这一点......我的家人......提前谢谢
答案 0 :(得分:0)
在C ++互操作方面我不是专家,所以我不能直接回答你的问题。但是,我建议您查看pinvoke.net。有很多关于从托管代码使用Windows API的正确方法的示例。这可能足以帮助您找出适合您的功能的信息。
答案 1 :(得分:0)
对于回调函数,您可以传入对委托的引用,P / Invoke会将回调编组到您的委托。请参阅此example。
对于最好转换为IntPtr的void *参数,IntPtr总是与指针大小相同。如果需要从该指针检索数据,可以使用System.Runtime.InteropServices.Marshal中的一种方法。
所以对你的例子来说:
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);
请注意,IpAddress可以是字符串。如果调用代码修改它并将其传回,它只需要是一个StringBuilder。由于C ++原型将其列为const char *,因此不会更改字符串。