c++ - 无法使简单的 COM 项目工作 : where and how to put implementation?

标签 c++ visual-studio-2008 dll com atl

我正在尝试按照 Simple COM Tutorial 的步骤进行操作这对我来说看起来不错且合乎逻辑。我通常会回避使用向导,但共识似乎是执行 COM 的最佳方式。

总结

  1. 使用向导创建 ATL 项目
  2. 使用“添加类”对话框创建一个 ATL 简单对象(示例中的 SimpleChatServer)
  3. 导航到 ClassView,右键单击对象的接口(interface),添加方法(示例中的 CallMe)
  4. 教程给出了一个方法体来使用
  5. 编译

但是,我的编译失败了,因为

error C2509: 'CallMe' : member function not declared in 'CSimpleChatServer' 

向导有问题吗?我本以为 VS 会自动在 CSimpleChatServer 中声明 CallMe 方法,并为我提供一个方法 stub 来添加实现,但它没有。

(与本教程的另一个区别是类浏览器不显示类 CSimpleChatServer,您可能认为它会显示。这可能是因为我禁用了智能感知?希望是一个单独的问题)。

那么,要做什么,在哪里以及如何定义和声明具有功能的实际 C++ 方法?

最佳答案

ATL 向导通常会在 header 中声明方法(使用 STDMETHOD(BLah)(...)),提供 stub 实现(使用 STDMETHODIMP CFoo::Blah(. ..)) 并将声明添加到 IDL 文件中。

但是,我记得当你手动修改头文件时,它会变得困惑,只会将声明添加到 IDL 中,而不会添加到 .h.cpp 文件。如果我是你,我会从头开始(并避免使用 COM,除非你有充分的理由不这样做)。

当您获得经验时,您将摆脱生成方法的向导(对于类,它可能太复杂了)。

关于c++ - 无法使简单的 COM 项目工作 : where and how to put implementation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8509157/

相关文章:

c# - 如何从 C# 访问和理解旧的 dll

visual-studio-2010 - 解除 VisualStudio 对插件 dll 的写锁定

c++ - 无法在 QImage 上绘制或更改像素的颜色

c++ - 这个 while 循环执行其正确的功能,但需要其他东西吗?

visual-studio-2008 - 无法将文件 "obj\Debug\project.dll"复制到 "bin\project.dll"。访问路径 'bin\project.dll' 被拒绝

关于此代码含义的 C# 问题

.net - 在 vb.net 中关闭异常时自动停止

c# - DLL 之间的循环依赖

c++ - 我是否必须为每个渲染的网格在每一帧调用 glVertexAttribPointer()?

c++ - OpenCV vector<point> - 没有用于初始化 'cv::Point_<int>' 的匹配构造函数