簡體   English   中英

將C#引用傳遞給C ++指針並返回

[英]Pass C# reference to C++ pointer and back

我想將C#引用傳遞給C / C ++代碼(指針),然后從指針返回C#引用。 我有很多對(uint,Object)。 我用C代碼創建了排序機制,因為它比C#快得多。 只需要鍵(uint)和值(對象引用)。 C代碼使用鍵進行排序,而不是更改值(指針)。 有沒有簡單的方法呢? 我需要使用編組嗎? C函數將被調用多次(甚至可能是一百萬次),所以我擔心編組太慢了,我甚至不知道如何用編組來完成它。 我相信當GC改變對象地址時,C#引用的地址不會改變。 因此不需要將對象放在pined內存中。 我是對的嗎? 現在我能夠使用DllImport調用C函數,我能夠將C#引用存儲到C指針,但是我無法將地址存儲在C指針的C#引用中。

關於如何做到這一點的任何想法?

不能將任何變量直接從manged c#代碼傳遞給本機c ++代碼。 解決方案是pinvoke,您可以在其中封送數據。

這工作正常,但你應該知道這不是每次緊固解決方案。 在每次調用時,必須復制內存並根據數據類型進行轉換。

我對類似問題的解決方案,我在Fortan中有一些舊代碼。 我將此代碼轉換為c,然后創建一個托管的c ++項目。 在c#中,我調用了這個manged c ++項目。

c#代碼如下所示:

不安全
{
double * input =(double *)utils.Memory.Alloc(sizeof(double)* n);
double * output =(double *)utils.Memory.Alloc(sizeof(double)* n);
//調用c ++代碼
c_plus_plus.code(輸入,輸出); //現在輸出包含輸出
//(您可以使用相同的數組作為輸入和輸出
}

我希望這有幫助。

暫無
暫無

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

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