gpt4 book ai didi

c# - 如何向 Visual Studio C++ ATL 项目创建的 COM .dll 添加新函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:58:46 28 4
gpt4 key购买 nike

我正在尝试创建一个非常基本的 COM dll 以包含在 C# 项目中,然后用于将一些 C++ 功能包装到 COM 模块中以包含在 C# 项目中(其余代码使用的语言)基地)。

我包含了 COM dll,向 COM dll 添加了一个类并在 C# 代码中对其进行了实例化,但到目前为止我还无法向新类添加新功能。

这是我做的:

  1. 新的 Visual C# Windows 窗体应用程序
  2. 右键解决方案->添加->新建项目...
  3. 添加新的 Visual C++ ATL 项目(称为 MyCOMDLL)
  4. 在 ATL 项目向导中选择的默认选项(我也尝试勾选“支持 COM+ 1.0”)
  5. 右击MyCOMDLL项目->添加->类
  6. 添加新的 Visual C++ ATL COM+ 1.0 组件
  7. 在简称中键入“MyCOMObject”,这会自动填充“名称”选项卡中的其他字段
  8. 将其他设置保留为默认值
  9. 构建 MyCOMDLL 项目
  10. 将对新 MyCOMDLL.dll 的引用添加到 C# Windows 窗体应用程序
  11. 右键单击 C# Windows 窗体应用程序项目->属性
  12. 在构建选项卡上将平台目标设置为 x86
  13. 添加“使用 MyCOMDLLLib;”到 Form1.cs 文件
  14. 在Form中添加一个按钮,并在按钮点击函数中添加

MyCOMDLLLib.MyCOMObjectClass myVariable = new MyCOMObjectClass();

我已经尝试过各种方法,所以除了最明显的之外我不会列出任何东西 - 我尝试向 MyCOMObject.h 添加一个类方法:

// CMyCOMObject
class ATL_NO_VTABLE CMyCOMObject :
public CComObjectRootEx,
public CComCoClass,
public IDispatchImpl
{
public:
CMyCOMObject()
{
}<p></p>

<pre><code>DECLARE_PROTECT_FINAL_CONSTRUCT()

HRESULT FinalConstruct()
{
return S_OK;
}

void FinalRelease()
{
}
</code></pre>

<p>DECLARE_REGISTRY_RESOURCEID(IDR_MYCOMOBJECT)</p>

<p>DECLARE_NOT_AGGREGATABLE(CMyCOMObject)</p>

<p>BEGIN_COM_MAP(CMyCOMObject)
COM_INTERFACE_ENTRY(IMyCOMObject)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()</p>

<p>// IMyCOMObject
public:
// SB: My attempt at adding a new method
int ReturnTwo()
{
return 2;
}
};</p>

ReturnTwo 方法在 CMyCOMObject 的类 View 中可见,但在 C# Windows 窗体应用程序项目的 MyCOMObjectClass 类 View 中不可见。

非常感谢任何帮助。

最佳答案

I tried adding a class method to MyCOMObject.h

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

如果手动修改接口(interface)是一件很痛苦的事情,需要修改三个地方。 .idl、.h 和 .cpp 文件。最好使用向导来完成。在“类 View ”窗口中,右键单击接口(interface)(如 IFoo)、添加、添加方法(或属性)。然后切换到.cpp文件来编写方法的实现。

关于c# - 如何向 Visual Studio C++ ATL 项目创建的 COM .dll 添加新函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5732885/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com