我正在使用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文件。这是一种合理的方法吗?
谢谢, 标记
答案 0 :(得分:0)
您可以尝试使用tlbimp.exe从ActiveX导入元数据,这将创建托管程序集,IWidget应该在那里。如果使用此托管版本的接口和[ClassInterface(ClassInterfaceType.AutoDispatch)]创建类,则应该将其传递给ActiveX。
请参阅tlbimp activex-wrap
的指南