我有一些代碼如下所示:錯誤CS1978:無法使用類型「UINT *」的表達式作爲參數傳遞給動態分派操作
public void GetData(dynamic dObj)
{
unsafe
{
byte[] myBuffer = new byte[255];
uint myBufferCount = 0;
fixed (byte* myBufferPointer = myBuffer)
{
dObj.GetDatas(myBufferPointer, &myBufferCount);
}
}
}
的想法是調用,將存在的函數稱爲「GetDatas」,它將緩衝區和計數作爲指針。然而,這會觸發以下錯誤:
Error CS1978: Cannot use an expression of type 'uint*' as an argument to a dynamically dispatched operation
我無法找到此錯誤或如何解決它的任何進一步的信息。 MSDN文檔似乎沒有幫助,因爲它們似乎根本沒有包含此錯誤消息。這裏出了什麼問題?我如何動態調用帶有簽名的功能:
void MyFunc(byte *buffer, uint *count);
?
我從來沒有使用指針與動態一起,但嘗試過與仿製藥一起使用它們的基本結論我來到的是,在C#球隊無人問津指針或具有新功能的不安全的代碼交互。而相關的文檔是完全無益的。 – 2011-03-24 12:09:13
我的猜測是該問題的基礎是csharp規範的25.1.1節,並澄清了後者「在不安全的代碼(§27)中,類型參數不應該是指針類型」,因爲DLR在內部使用表達式樹在某些時候很多表達式>可能不得不被創建,並且它不起作用。 –
2011-03-24 12:26:25
@Virtual - 你指的是哪個版本的規範?我正在尋找4.0,其部分似乎只上升到18. – 2011-03-24 12:54:48