2009-10-30 64 views
0

我需要等價的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 - >在這裏,我需要implemet了一些回調函數應該調用函數一樣

myNotifyFunc(enumType notificationType, void *data) 
{ 

} 

in c#「void * data」is not avalable如何實現這一點... hepl我傢伙...提前感謝

回答

0

對於回調函數,您可以將參考傳遞給委託,P/Invoke會將回調編組爲委託。看到這個example

對於最好轉換爲與指針大小相同的IntPtr的void *參數。如果您需要從該指針中檢索數據,則可以使用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); 

需要注意的是:Ip地址可以是一個字符串。如果調用代碼對其進行修改並將其傳回,它將只能是一個StringBuilder。由於C++原型將其列爲const char *,因此它不會更改字符串。

+0

hi shf301 ..... NotifyFunc callc = new NotifyFunc(Callbackas);這是dele startVssSdkClientEcho(0.0.0.0,00,callc,siss,false);這是調用樂趣 Callbackas(eNotificationType類型,IntPtr的數據){}這是我所謂的好玩 是糾正它給一些錯誤味精 – 2009-10-30 07:17:57

+0

這是我的錯誤 運行時檢查失敗#0 - 如果ESP是值沒有正確保存在 函數調用中。這通常是由於 調用一個函數聲明的函數,該函數聲明瞭一個調用約定,函數指針聲明瞭一個 不同的調用約定 – 2009-10-30 07:23:53

0

我不是專家,當談到C++互操作,所以我無法回答你的問題直接。不過,我建議你看看pinvoke.net。有很多從託管代碼中使用Windows API的正確方法示例。這可能是足夠的信息來幫助你找出適合你的功能的東西。

相關問題