如何在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#代码中实例化了它,但到目前为止,我还不能向新类添加新功能。

我是这样做的:

  1. 右键单击解决方案->添加->新建项目…
  2. 新增Visual c++ ATL项目(MyCOMDLL)
  3. 在ATL项目向导中选择的默认选项(我也尝试过勾选'Support COM+ 1.0')
  4. 右键单击MyCOMDLL项目->添加->类
  5. 添加新的Visual c++ atlcom + 1.0组件
  6. 在Short name中输入"MyCOMObject",它会自动填充"Names"选项卡中的其他字段
  7. 其他设置保持默认
  8. 构建MyCOMDLL项目
  9. 在c# Windows窗体应用程序中添加对新的MyCOMDLL.dll的引用右键单击c# Windows窗体应用程序项目->属性在Build选项卡上,将平台目标设置为x86
  10. 在form .cs文件中添加"using MyCOMDLLLib;
  11. 在表单中添加一个按钮,并在按钮中点击添加

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的类视图中不可见。

非常感谢。

如何在Visual Studio c++ ATL项目创建的COM .dll中添加新函数

我尝试添加一个类方法到MyCOMObject.h

这不够好。项目中最重要的文件是。idl文件(接口描述语言)。该文件生成嵌入到DLL中的类型库。类型库是。net用来生成托管导入库的。因为没有修改.idl文件,所以添加的函数不会在那里。

修改接口是一个痛苦的如果你做手工,有三个地方需要编辑。.idl、.h和.cpp文件。最好使用向导完成。在类视图窗口中,右键单击接口(如IFoo),添加,添加方法(或属性)。然后切换到.cpp文件来编写该方法的实现。

您是否再次将新构建的dll复制到c#项目中?