【发布时间】:2011-08-09 15:02:01
【问题描述】:
我正在尝试创建一个非常基本的 COM dll 以包含在 C# 项目中,然后用于将一些 C++ 功能包装到 COM 模块中以包含在 C# 项目中(其余代码使用的语言基础)。
我包含了 COM dll,向 COM dll 添加了一个类,并在 C# 代码中对其进行了实例化,但到目前为止,我还无法向新类添加新功能。
这就是我所做的:
- 新的 Visual C# Windows 窗体应用程序
- 右键解决方案->添加->新建项目...
- 添加新的 Visual C++ ATL 项目(称为 MyCOMDLL)
- 在 ATL 项目向导中选择的默认选项(我也尝试勾选“支持 COM+ 1.0”)
- 右键MyCOMDLL项目->添加->类
- 添加新的 Visual C++ ATL COM+ 1.0 组件
- 在短名称中键入“MyCOMObject”,这会自动填充“名称”选项卡中的其他字段
- 其他设置保持默认
- 构建 MyCOMDLL 项目
- 向 C# Windows 窗体应用程序添加对新 MyCOMDLL.dll 的引用
- 右键单击 C# Windows 窗体应用程序项目->属性
- 在 Build 选项卡上将 Platform target 设置为 x86
- 添加“使用 MyCOMDLLLib;”到 Form1.cs 文件
- 在表单中添加一个按钮并在按钮点击函数中添加
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 方法在 C# Windows 窗体应用程序项目的 CMyCOMObject 的类视图中可见,但在 MyCOMObjectClass 的类视图中不可见。
非常感谢任何帮助。
【问题讨论】: