簡體   English   中英

如何訪問IEnumerable <byte> 在C ++ / CLI中

[英]How to access IEnumerable<byte> in C++/CLI

我在C#中定義了這樣的接口:

public interface ISender
{
    ReponseType SendData(PacketType packet);
}

PacketType看起來像這樣(C#):

public struct PacketType
{
    public IEnumerable<byte> PartOne;
    public IEnumerable<byte> PartTwo;
}

我想用C ++編寫此接口的一種實現(因為C ++庫中提供了一種協議實現,並且在C ++中在托管代碼和非托管代碼之間跳轉非常容易)。 我創建了一個ref class並實現了足夠的必需方法來進行編譯,鏈接和調試:

ResponseType MySender::SendData(PacketType packet)
{
    return ResponseType::Failure;
}

現在,我堅持將IEnumerable s轉換為uint8_t * ,並獲取它們的長度。 根據IntelliSense,它們的類型為System::Collections::Generic::IEnumerable<unsigned char> ^ ,並且它們都沒有附加任何公共方法。

這看起來應該很明顯,所以我覺得我一定錯過了一些明顯的東西。

您需要先將IEnumerable轉換為托管數組,然后再將托管數組轉換為本地數組。

由於ToArray是擴展方法,因此在C ++ / CLI中,您可以將其稱為靜態函數:

array<unsigned char>^ a = Enumerable::ToArray<unsigned char>(PartOne);

關於如何將數據從托管陣列復制到本機陣列,您可以在此處找到操作方法。

不知道為什么Intellisense無法正常工作,但是您應該有一些可用的公共方法( GetEnumerator和從object繼承的方法)。 您不會看到擴展方法,但是應該可以從Enumerable類中將它們作為靜態方法調用:

int partOneCount = Enumerable::Count(packet -> PartOne);
int partTwoCount = Enumerable::Count(packet -> PartTwo);

(由於我不經常使用C ++語法,因此可能略有偏離,但是您應該明白這個想法-任何人都可以自由更正語法)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM