내 질문에 답해주세요.
자신의 COM 서버에서 IStream을 반환하면 .NET interop DLL은 해당 인터페이스에 IStream을 넣습니다. 예를 들어, 타입 라이브러리가 MyComServer이면, interop에는 MyComServer.Interop.IStream 클래스가 포함됩니다.
이 IStream 클래스에는 RemoteRead, RemoteWrite 등과 같은 기능이 있습니다. 이들은 첫 번째 매개 변수로 ref 바이트를 사용합니다. 이러한 것들을 32 비트에서 32 비트로 잘 사용했지만 ref가 아마도 포인터가되어 64에서 32로 잘못되었다.
해결책은 MyComServer.Interop.IStream을 System.Runtime.InteropServices.ComTypes.IStream로 변환하고 "as"(또는 아마도 캐스팅)를 사용하는 것입니다. 그런 다음 반환 크기에 대해 더 익숙한 byte [], int count 및 IntPtr을 사용합니다. 그것이 아웃 INT 될 수 있기
을 IntPtr 성가신,하지만 난 사용 (그래서 확인 컴파일러하지 손이에 입력 ..)
byte[] buffer = new byte[100];
IntPtr ptr = Marshall.AllocHGlobal(sizeof(int));
stream.Read(buffer, 100, ptr);
슬프게 때로는있어 여전히 .NET 2.0 (고객 여전히 3.5를 설치하는 것을 좋아하지 않습니다 - 윈도우 7이 가장 오래 걸릴 때, 어쨌든 그것을 가질 것입니다. 비스타를 설치하지 않은 사람들은 그것을 사용하지 못하게합니다) – MrPurpleStreak