다음과 같은 코드가 있습니다.오류 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#을 팀에 아무도 포인터 또는 새로운 기능 안전하지 않은 코드의 상호 작용에 대해 관심이 없다는 것입니다 온 . 그리고 관련 문서는 전혀 도움이되지 않습니다. –
내 생각에 문제의 근본은 csharp 스펙의 섹션 25.1.1이며 DLR이 내부적으로 표현 트리를 사용하기 때문에 "안전하지 않은 코드 (type 277)에서 포인터 타입이 아닐 것" 어떤 시점에서 Expression>이 생성되어야 할 수도 있고 작동하지 않을 수도 있습니다. –
@Virtual - 어떤 버전의 스펙을 참조하고 있습니까? 4.0에서 찾고 있는데 그 섹션은 최대 18 개까지만 보이는 것 같습니다. –