3

我有一个 ActiveX 控件(用 C++ 编写)并从 C# 项目中引用它的 RCW 程序集(由 aximp.exe 创建)。

在实现 Ax 控件的 C++ 代码中,我有一个实现接口的类,该接口作为 Ax 控件的属性公开。

查看生成的 RCW 程序集,我看到了界面。我可以尝试声明其类型的变量。

现在,如果我只有一个指向在内存中实现接口的 C++ 类实例的指针,是否可以使用该指针将其数据编组到表示接口的托管 C# 对象中?

请注意,它不是接口指针。它是指向我拥有的类的实例的指针。

4

2 回答 2

1

您可能想尝试一下 C++ / CLI。编写在 C++ 和 C# 之间进行互操作的代码是一件轻而易举的事。

于 2009-07-24T20:22:20.250 回答
1

我认为这里有两个问题。

你能编组一个指向托管代码的“this”指针而不是一个特定的接口吗

是的。这可以通过在 C# 应用程序中实现 COM 接口,然后将“this”作为参数之一传递来实现。接受“this”指针的托管类型应该是 Int32 或 Int64(无符号 OK),具体取决于您的平台

我可以用这个指针做任何有用的事情吗

是和否。

您不能直接在此指针上调用任何实例方法,因为没有可以将值转换为的类型。所以它不能像使用 COM 接口那样使用。

您可以做的是在您的本机应用程序中定义一组外部“C”方法,这些方法将该类型的指针作为第一个参数,然后在该对象上调用特定方法。然后,您可以使用 C# PInvoke 进入该方法

C++

void SomeType_SomeMethod(SomeType* pSomeType) {
  pSomeType->SomeMethod();
}

C#

[DllImport("YourDll.dll")]
public static extern void SomeType_SomeMethod(IntPtr pSomeType);
于 2009-07-25T01:33:50.073 回答