我试图将ITest类型的引用从C ++中的方法传递给C#,并在那里访问引用中的数据。 C#和CPP从同一个DLL(Test.dll)获取type-def C ++从外部接收ref,我可以访问其中的所有数据。编译错误是:
错误C2664:无法从' ITestObject *'转换参数1到'测试:: ITestObject ^%'。
// Test.dll contains implementation of ITestObject
#import "C:\Program Files\T\Test.dll" no_namespace
double __clrcall Calc(ITestObject* tObj)
{
return TS::ClassA::Calc((System::IntPtr)tObj, _2);
}
using Test;
using System;
using System.Runtime.InteropServices;
namespace CLib
{
public Class classA
{
public static double Calc(IntPtr tRef)
{
IntPtr pInterface;
ITestObject myObj;
IntPtr ptr = Marshal.GetIUnknownForObject(tRef); // Generate the IntPtr
// Retrieving ITestObject
// Version 1
IntPtr pIUnk = Marshal.GetIUnknownForObject(tRef);
Int32 result = Marshal.QueryInterface(pIUnk, ref myGuid, out pInterface);
myObj = ??
// Version 2
IntPtr pIUnk2 = Marshal.GetComInterfaceForObject(tRef, typeof(ITestObject));
// vTable = Marshal.ReadIntPtr(pIUnk2); <-- necessary?
myObj = (ITestObject) Convert.ChangeType(pIUnk2, typeof(ITestObject));
Marshal.Release(pIUnk);
}
}
}
MS提出的const的使用没有帮助。