将引用从C ++ - CLI传递给C#

时间:2014-03-14 12:59:08

标签: c# visual-c++ dll reference c++-cli

我试图将ITest类型的引用从C ++中的方法传递给C#,并在那里访问引用中的数据。 C#和CPP从同一个DLL(Test.dll)获取type-def C ++从外部接收ref,我可以访问其中的所有数据。编译错误是:

  

错误C2664:无法从' ITestObject *'转换参数1到'测试:: ITestObject ^%'。

C ++ / CLI

// 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);
}

C#DLL

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的使用没有帮助。

0 个答案:

没有答案