Из C# Я пытаюсь вызвать OLE-интерфейс, написанный на C++. Подписи от .ODL файла C++ кода:Из C# как я могу назвать неуправляемый интерфейс OLE, для которого требуется параметр * VARIANT?
long GetData1(int* data);
long GetData2(double* data);
long GetData3(VARIANT* data);
Вот пример моих C# код:
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IMyInterface
{
[DispId(1)]
long GetData1 ([In, Out] ref int data);
[DispId(1)]
long GetData2 ([In, Out] ref double data);
[DispId(3)]
long GetData3 ([In, Out, MarshalAs(UnmanagedType.IUnknown)] ref IntPtr data);
}
GetData1() и GetData2() работает нормально, но GetData3() приводит к исключению типа «Несоответствие типа».
Для GetData3() Я пробовал каждую комбинацию типов In, Out, Ref, MarshallAs(), C# и т. Д. Я могу думать без успеха.
Обратите внимание, что код C++ не может быть изменен.
Любые предложения будут оценены.
см. Https://msdn.microsoft.com/en-us/library/aa719104(VS.71).aspx VARIANT is Object –