2011-05-25 58 views
3

我在將C++/CLI代碼中的參數傳遞給.NET C#函數時遇到問題。如何在C++/CLI中將C++短*傳遞給託管C#程序集

在C++中我有類似下面:

void SomeFunction(short *id) 
{ 
    CSharpClass::StaticClassInstance->SetValue(id); 
} 

在C#端,功能都被定義REF參數爲:

public void SetValue(ref short id) 
{ 
    id = this.internalIdField; 
} 

編譯器錯誤我收到的時候調用SetValue(id)爲「無法將參數1從'short *'轉換爲'short%'」。

我發現一個跟蹤引用(%)等價於C#ref,但我不知道如何將它與我試圖傳遞的short *參數一起使用。

在此先感謝。的CSharpClass::SetValue

回答

3

邏輯C++/CLI簽名

void SetValue(short% id); 

如果你知道C++(相對於C++/CLI),這裏的答案是完全一樣的,因爲這將是,如果你有C++簽名

void SetValue(short& id); 

也就是說,簡單地取消引用指針:

void SomeFunction(short *id) 
{ 
    CSharpClass::StaticClassInstance->SetValue(*id); 
} 
+0

非常感謝您的答覆。我可以發誓我已經試過這個,但顯然我不能有,因爲只要我解引用指針,它就編譯了。乾杯。 – AndyL 2011-05-25 12:37:41

1

如果你想成爲長篇大論,declare a tracking reference,跟蹤參考分配給您的ID參數,然後通過跟蹤參考你的函數...

short %s = *id; 

SetValue (s); 

如果你不想長篇大論,只是取消引用指針。雖然編譯器不能轉換短*成短%,它可以轉換成短很短...%

SetValue (*id); 
相關問題