我正在使用C#和WinForms编写应用程序。我有第三方提供的ActiveX控件。我将ActiveX控件拖到窗体上,并获得该控件实现的类的实例(称为“窗口小部件”)。

现在,我需要将接口指针IWidget从C#传递到旧版C ++代码中。我计划将C ++代码放在dll中,并使用P / Invoke从C#调用它。问题是我不知道如何向C ++代码提供IWidget定义。 C ++代码的原始作者有头文件(例如widget.h),因此他们可以#include widget.h,并声明一个IWidget指针。

我没有.h(并且无法获取)。我只有ActiveX。那么如何在dll中声明IWidget指针?

到目前为止,我唯一的想法是从ActiveX dll创建IDL文件。那是一个合理的方法吗?

谢谢,
标记

最佳答案

您可以尝试使用tlbimp.exe从ActiveX导入元数据,这将创建托管程序集,并且IWidget应该在那里。如果使用此接口的托管版本和[ClassInterface(ClassInterfaceType.AutoDispatch)]创建类,则应将其传递给ActiveX。

请参阅tlbimp activex-wrap的方法

关于c# - 声明不带头文件的COM接口(interface)指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8579087/

10-15 00:33