C# 라이브러리에서 내 보낸 구조체의 배열을 C++ 코드로 전달하려고합니다. 목적은 구조체의 SAFEARRAY를 C++에서 C#으로 전달하는 것입니다.COM Interop에 의해 관리되는 구조체의 SAFEARRAY 마샬링
나는
에서 지시를 따라했지만 호출이 오류를 받고는
0x80028019 오래된 형식이나 잘못된 형식 라이브러리
을 GetRecordInfoFromTypeInfo. 당신이 SAFEARRAY를 사용해야하는 경우 내가 일을 다음과 기대,void MyMethod([MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] MyStruct[] data, long size);
을 (하지만 난으로, 100 % 확실하지 않다 : 당신이있는 dispinterface를 할 필요가없는 경우
이것이 도움이되지 않는 이유가 있습니까? (http://stackoverflow.com/questions/12503041/passing-an-array-of-structs-from-c-sharp-to-c- using-com-callable-wrapper/12508525 # 12508525)? SAFEARRAY가 정말로 필요합니까? 구조체 여야합니까? 디스패치 인터페이스를 구현해야합니까? –
이전 시도는 C#에서 C++로 구조체를 전달하는 것이었지만 지금은 그 반대의 작업을하고 있습니다. LPArray 마샬링의 문제점은 배열의 요소 하나만 마샬링하고 가변 길이 배열은 C# 시그니처에 정의 된 배열에 바인딩되지 않는다는 것입니다. 그래서 마샬을 Safearray로 변경해야했습니다. 이전 방법이 변경없이 작동하는지 알려주십시오. – TrustyCoder
이 부분은 다소 혼란 스럽습니다. "C# 라이브러리에서 C++ 코드로 내 보낸 구조체의 배열을 전달하려고합니다." LPArray가 하나의 요소 만 관리한다는 점에 놀랐습니다. (관리되지 않는 것에서 관리되는 것까지) –