如何将 IDispatch* 放入托管代码中

2024-05-26

我一直在考虑尝试使用 C# 编写一个实现 OPOS 服务对象的 COM 对象。我已经使用自动化和 MFC 在 C++ 中完成了它,这并不太困难。所以我坚持尝试将其转换为一种方法。我将排除界面中的其他方法,因为它们很简单(或者我希望如此)。

[id(6), helpstring("method OpenService")]
LONG OpenService(BSTR lpclDevClass, BSTR lpclDevName, IDispatch* lpDispatch);

到目前为止,我的 C# 代码看起来与此类似,但我仍停留在 OpenService 上。

[ComVisible(true)]
[Guid("76F8309C-3837-4065-960F-BE156383896D")]
[ClassInterface(ClassInterfaceType.AutoDispatch)]
public class IErtMSR
{
    [DispId(1)]
    int COFreezeEvents([MarshalAs(UnmanagedType.VariantBool)] bool Freeze);
    [DispId(2)]
    int GetPropertyNumber([In] int lPropIndex);
    [DispId(3)]
    void SetPropertyNumber([In] int lPropIndex, [In] int nNewValue);
    [DispId(4), MarshalAs(UnmanagedType.BStr)]
    string GetPropertyString([In] int lPropIndex);
    [DispId(5)]
    void SetPropertyString([In, MarshalAs(UnmanagedType.BStr)] string StringData);
    [DispId(6)]
    int OpenService([In, MarshalAs(UnmanagedType.BStr)] string lpclDevClass, [In, MarshalAs(UnmanagedType.BStr)] string lpclDevName, IDispatch* lpDispatch);
    //...the rest of the 24 methods.
}

正如你所看到的,我不知道要为 IDispatch* 添加什么。在这种情况下我该用什么?


您不需要为 COM 创建托管定义IDispatch或明确实施其成员。该框架对其有内置支持。只需声明您的OpenService像这样:

[DispId(6)]
int OpenService(
    [In, MarshalAs(UnmanagedType.BStr)] string lpclDevClass, 
    [In, MarshalAs(UnmanagedType.BStr)] string lpclDevName, 
    [In, MarshalAs(UnmanagedType.IDispatch] object lpDispatch);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 IDispatch* 放入托管代码中 的相关文章

随机推荐

  • Django如何通过模板修改数据库记录

    我想删除我选择的记录 并且run html将会刷新 我该怎么做 由于我使用函数run在views py中发送数据库中的记录 以及run需要一个参数构建 可以通过使用获得run name 所以我认为当我单击提交按钮时 我需要传递 run na
  • 从 Python 脚本创建可执行文件,同时获取较小的输出大小

    我的问题可能已经在某个地方得到了解答 但我仍然找不到直接的答案 我想从 python 代码创建一个独立的可执行文件 我已经尝试过很多解决方案 例如py2exe pyinstaller等等 但我的问题是输出文件大小很大 例如 在pyinsta
  • Eclipse CDT C/C++:包含另一个项目的头文件

    我在 Eclipse CDT 中有两个 C 项目main and shared In shared我有一个名为calc h 我想在中使用这个标头main 所以我做了以下事情 added include calc h到相关文件main In
  • Android 中的定制数字时钟

    您好 我想以 HH mm AM PM 的格式在我的应用程序中显示时间 数字时钟还包括秒 即 HH mm ss 上午 下午 如何避免显示秒 有没有什么可行的办法 请帮助我 您必须克隆该文件DigitalClock java要在您的应用程序中使
  • Sass 与 BEM,继承选择器

    我正在使用 Sass 3 4 1 和 BEM 所以我的 scss 是 photo of the day title font size 16px 我希望每次将鼠标悬停在 photo of the day标题发生了一些事情 这很常见 所以通常
  • intfmt: db "%d", 10, 0 在汇编中的含义

    我最近在我的一个汇编文件的顶部看到了这个 并意识到我在打印整数的过程中花了很长时间使用它 而没有真正意识到它最初来自哪里 在我的基本汇编模板中使用 或 10 0 是什么结尾的意思是 section data intfmt db d 10 0
  • 寻找基于循环固定大小数组的双端队列

    我正在寻找一个Deque其具有以下特点 它有固定的大小 如果我在头 尾添加元素 则另一端的元素会丢失 它是基于数组的 所以我可以在恒定时间内访问随机元素 我可以在前面或末尾添加元素 双端队列 我检查了Deque的实施JCF但我没有找到任何合
  • Ruby on Rails 中的枚举

    我是一名 C 程序员 我正在研究 ruby on Rails 但我可能在心态或其他方面遇到了一些麻烦 我有一个投票对象 该对象可以是赞成 中立或反对 我通常会让投票对象有一个像这样的字段 private VoteEnum voteEnum
  • 比较 2 个 linq 应用程序:意外结果

    我起草了2 ASP NET应用程序 using LINQ 一个连接到微软SQL服务器 另一个对某些专有内存结构 这两个应用程序都可以使用以下表格3 个 int 字段 有500 000 条记录 内存结构与 SQL Server 表相同 使用的
  • 当没有更多消息时退出 Spring Integration

    我使用 Spring Integration 4 1 配置从数据库中批量检索消息 而不是作为服务 我知道每天要处理十几条消息 因此我需要每天运行一次批处理 我的 jdbc inbound channel adapter 配置为检索 max
  • 在 Android 上使用 Excel 文件

    我正在开发一个应该能够创建 读取和写入 Excel 文件的模块 是否有 推荐 轻量级 Java 库用于处理可以在 Android 上运行的 Excel 文件 欢迎提出建议 Thanks 找到一个
  • 在 MVC 应用程序中配置 NHibernate 二级缓存

    我有一个使用 NHibernate 的 MVC3 应用程序 一切都很顺利 直到我开始尝试添加二级缓存 浏览网页几个小时后 我终于找到了我认为正确的 dll NHibernate Caches SysCache2 dll 并将其添加到我的项目
  • Python FFmpeg查询rtsp太慢

    目前 我正在尝试使用 python 和 FFmpeg 来查询原始格式为 h264 的 rtsp 数据 直播流视频的信息为 fps 29 分辨率 1280 720 我希望我可以以相同的格式 h264 查询数据并将其放入python队列中以便将
  • 使用 geom_bar 按列中一个特定值的计数对 y 轴进行排序

    想知道如何通过减少猕猴桃的数量来对 y 轴上的簇进行排序 df data frame df data frame matrix df nrow 200 ncol 2 colnames df lt c cluster name df clus
  • 为什么在调用 Asp.Net ListBox 自动回发方法时会调用不相关的(自动回发)方法?

    我确信这很简单 但它让我发疯 我的页面上有一个列表框来显示艺术家 当索引更改时它会调用一个方法 还有一个按钮 单击时会从另一个页面中的该列表中加载艺术家
  • 将服务器端邮政编码传递给 Stripe 结账

    我正在尝试设置 Stripe 结帐 以便我可以将服务器端客户邮政编码传递到 Stripe 结帐 看起来应该很简单 但我无法让它工作 最简单的是 我使用的代码是
  • 为什么 Pytest 对夹具参数执行嵌套循环

    使用 Pytest 我想编写一个测试函数 该函数接受多个装置作为参数 每个灯具都有几个参数 例如 test demo py 中是一个函数test squared is less than 10需要固定装置 negative integer
  • 用php将数字转换为字母[重复]

    这个问题在这里已经有答案了 可能的重复 在 PHP 中将数字 1 2 3 转换为字符串 一 二 三 https stackoverflow com questions 2112571 converting a number 1 2 3 to
  • Flutter:“UIAlertView”已弃用:首先在 iOS 9.0 中弃用

    我收到以下错误 Users flo pub cache hosted pub dartlang org image picker 0 6 7 12 ios Classes FLTImagePickerPlugin m 1 49 20 war
  • 如何将 IDispatch* 放入托管代码中

    我一直在考虑尝试使用 C 编写一个实现 OPOS 服务对象的 COM 对象 我已经使用自动化和 MFC 在 C 中完成了它 这并不太困难 所以我坚持尝试将其转换为一种方法 我将排除界面中的其他方法 因为它们很简单 或者我希望如此 id 6