如何在Visual Studio c++ ATL项目创建的COM .dll中添加新函数
本文关键字:添加 dll 新函数 函数 COM Visual Studio c++ 创建 项目 ATL | 更新日期: 2023-09-27 17:50:35
我正在尝试创建一个非常基本的COM dll,用于包含在c#项目中,然后用于将一些c++功能打包到一个COM模块中,以便包含在c#项目中(其余代码库使用的语言)。
我包含了COM dll,在COM dll中添加了一个类,并在c#代码中实例化了它,但到目前为止,我还不能向新类添加新功能。
我是这样做的:
- 右键单击解决方案->添加->新建项目…
- 新增Visual c++ ATL项目(MyCOMDLL)
- 在ATL项目向导中选择的默认选项(我也尝试过勾选'Support COM+ 1.0')
- 右键单击MyCOMDLL项目->添加->类
- 添加新的Visual c++ atlcom + 1.0组件
- 在Short name中输入"MyCOMObject",它会自动填充"Names"选项卡中的其他字段
- 其他设置保持默认
- 构建MyCOMDLL项目
- 在c# Windows窗体应用程序中添加对新的MyCOMDLL.dll的引用右键单击c# Windows窗体应用程序项目->属性在Build选项卡上,将平台目标设置为x86
- 在form .cs文件中添加"using MyCOMDLLLib;
- 在表单中添加一个按钮,并在按钮中点击添加
MyCOMDLLLib.MyCOMObjectClass myVariable = new MyCOMObjectClass();
I've tried various things so won't list any except the most obvious here - I tried adding a class method to 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公众://SB:我在尝试添加一个新方法int ReturnTwo (){返回2;}};
ReturnTwo方法在CMyCOMObject的类视图中可见,但在c# Windows窗体应用程序项目的MyCOMObjectClass的类视图中不可见。
非常感谢。
我尝试添加一个类方法到MyCOMObject.h
这不够好。项目中最重要的文件是。idl文件(接口描述语言)。该文件生成嵌入到DLL中的类型库。类型库是。net用来生成托管导入库的。因为没有修改.idl文件,所以添加的函数不会在那里。
修改接口是一个痛苦的如果你做手工,有三个地方需要编辑。.idl、.h和.cpp文件。最好使用向导完成。在类视图窗口中,右键单击接口(如IFoo),添加,添加方法(或属性)。然后切换到.cpp文件来编写该方法的实现。
您是否再次将新构建的dll复制到c#项目中?