任何人都可以找到等效的c#代码

时间:2009-10-30 06:12:52

标签: c#

我需要等效的c#代码

VssSdkClientId VSS_SDK_SPEC startVssSdkClientEcho(const VssSdkXChar *host,
                                                      const VssSdkPort port,
                                                      NotifyFunc &notifyFunc,
                                                      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”中是无法实现的,如何能够实现这一点......我的家人......提前谢谢

2 个答案:

答案 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 *,因此不会更改字符串。