我正在尝试创建一个非常基本的COM dll以包含在C#项目中,然后用来将一些C ++功能包装到COM模块中以包含在C#项目中(其余代码使用的语言)碱)。
我包含了COM dll,在COM dll中添加了一个类并在C#代码中实例化了它,但到目前为止我还没有能够为新类添加新功能。
这就是我的所作所为:
MyCOMDLLLib.MyCOMObjectClass myVariable = new MyCOMObjectClass();
我尝试了各种各样的东西,所以不会列出除了最明显的东西 - 我尝试在MyCOMObject.h中添加一个类方法:
// CMyCOMObject
class ATL_NO_VTABLE CMyCOMObject :
public CComObjectRootEx,
public CComCoClass,
public IDispatchImpl
{
public:
CMyCOMObject()
{
}
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_MYCOMOBJECT)
DECLARE_NOT_AGGREGATABLE(CMyCOMObject)
BEGIN_COM_MAP(CMyCOMObject)
COM_INTERFACE_ENTRY(IMyCOMObject)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
// IMyCOMObject
public:
// SB: My attempt at adding a new method
int ReturnTwo()
{
return 2;
}
};
ReturnTwo方法在CMyCOMObject的类视图中可见,但在C#Windows窗体应用程序项目的MyCOMObjectClass的类视图中不可见。
任何帮助都非常感激。
答案 0 :(得分:2)
我尝试将一个类方法添加到MyCOMObject.h
这还不够好。项目中的超级重要文件是.idl文件(接口描述语言)。该文件生成嵌入DLL中的类型库。类型库是.NET用于生成托管导入库的类型。您添加的功能将不在那里,因为您没有修改.idl文件。
如果手动修改界面很痛苦,有三个地方需要编辑。 .idl,.h和.cpp文件。最好使用向导完成。在“类视图”窗口中,右键单击界面(如IFoo),“添加”,“添加方法”(或“属性”)。然后切换到.cpp文件以编写方法的实现。
答案 1 :(得分:0)
您是否已将新的dll版本再次复制到C#项目中?