C# 组件事件?

2024-05-25

我正在尝试编写一个将公开事件的 C# 组件。该组件将由非托管 C++ 应用程序导入。根据一些教程,我想出了这段代码(针对 C# 端):

namespace COMTest
{
[ComVisible(true),
Guid("02271CDF-BDB9-4cfe-B65B-2FA58FF1F64B"),
InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ITestEvents
{
    void OnTest();
}

[ComVisible(true),
Guid("87BA4D3A-868E-4233-A324-30035154F8A4")]
public interface ITest
{
    void RaiseTest();
} // End of ITest

[ComVisible(true),
Guid("410CD174-8933-4f8c-A799-8EE82AF4A9F2"),
ClassInterface(ClassInterfaceType.None),
ComSourceInterfaces(typeof(ITestEvents))]
public class TestImplimentation : ITest
{
    public TestImplimentation()
    {
    }

    public void RaiseTest()
    {
        if (null != OnTest)
            OnTest();
    }

    public delegate void Test (); //No need to expose this delegate
    public event Test OnTest;
}
}

现在我的 C++ 代码很简单:

#import "COMTest.tlb" named_guids raw_interfaces_only

这会生成一个 tlh 文件。这个 tlh 文件包含除我的事件(OnTest)之外的所有内容。我做错了什么?


COM 事件接收器对于外行来说是相当邪恶的。

步骤基本上是

  • 创建传出(源)接口
  • 实施一个 IConnectionPointContainer 和 IConnectionPoint 接口,使用 这些传递给客户端实现 源接口的

The good消息是,在互操作命名空间中,有一些属性可以帮助您(大部分)自动执行此操作(ComSourceInterfaces属性 http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.comsourceinterfacesattribute.aspx)有一个很好的例子来说明它的用法here http://msdn.microsoft.com/en-us/library/dd8bf0x3(VS.71).aspx.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 组件事件? 的相关文章

随机推荐

  • 在 Spring 和 Angular JS 之间处理 CORS 的最佳实践?

    我们正在使用 Java Spring 来构建 REST API 我们使用 angularjs 作为前端 其余 api 位于一个域中 而 angularjs 位于另一域中 最初 当我尝试从 Angular 向其余 api 发出 POST 请求
  • 为什么最新的 Python 3.8.x 版本不提供 Windows 安装程序?

    我需要在Windows计算机上安装Python 3 8并希望使用最新的小版本3 8 12 https www python org downloads release python 3812 官方发布网页提供了源代码的 tarball 文件
  • 如何检测和处理UIWebView中的HTTP错误代码?

    我想在收到 HTTP 错误 404 等时通知用户 我怎样才能检测到这一点 我已经尝试过实施 void webView UIWebView webView didFailLoadWithError NSError error 但当我收到 40
  • 将 pynput 与 pyinstaller 一起使用时出现错误

    我的一个朋友让我给他写一个程序 我使用 pynput 来处理一些输入和其他功能 当我使用 pyinstaller 将程序转换为可执行文件时 启动可执行文件会出现以下错误 File site packages pynput keyboard
  • matplotlib get_color 用于子图

    我正在按照这里的教程进行操作 https matplotlib org gallery ticks and spines multiple yaxis with spines html https matplotlib org galler
  • 从 HTML 转换为 Markdown 时阻止 Pandoc 转义单引号

    如果我转换单引号 从 HTML 到 Markdown 它会自动转义 echo pandoc f html t markdown 我希望它输出时不带斜杠 因为它使带有缩写的文本更难以阅读 我认为这可能是由于 all symbols escap
  • 如何使用 AspectJ 将字段添加到自定义注释的类

    要使用aspectj向某个特定类添加字段 我们需要这样做 package com test public class MyClass private String myField public aspect MyAspect private
  • QML改变图像颜色

    我搜索了如何对图像进行着色 格式为 svg 或 png 我尝试用一 个填充图像的矩形覆盖我的图像 但由于我的图像不是矩形 它会给整个矩形着色 而不仅仅是图像 可以用qml改变图像颜色吗 或者 是否可以使用 QPixmap 更改 qt 使用
  • Camel end 与 endChoice - 不是通常的查询

    首先 是的 我已经搜索过 是的 我已经阅读了每个人都指向的同一个 Apache 文档 我认为这有点混乱 我想我知道答案 所以让我举一个我认为正确的例子 然后是我认为的答案 谢谢 哦 我确实知道某些 endChoice 行并不是严格必要的 C
  • RTK 查询支持 `isLoading` 以在缓存失效后自动重新获取

    很难找到这个问题的好的答案 解决方案 我有一个帖子列表组件 允许删除单个帖子行 我正在使用普通的queryMutation出于删除目的 执行 deletePostById build mutation lt success boolean
  • 内容居中的流式布局

    我有一排项目 当窗口宽度变得太小而无法显示一行中的所有项目时 这些项目应该堆叠起来 如下图所示 The Flow组件堆叠项目 但它们不是居中而是在左侧或右侧对齐 Flow Item Item Item Item Item QML 中是否有内
  • 在 .NET 中获取远程计算机上环境变量的实际值

    我正在尝试获取实际值 of 环境变量 这是我到目前为止所拥有的 string query string Format Select VariableValue From Win32 Environment Where Name 0 vari
  • Web Api FromBody 在 Web 客户端中为空

    您好 我想通过 Web api 控制器中的 body 变量始终为 null 从 C 客户端调用 Web Api 方法 怎样设置才正确呢 客户端 IFileService imgService new ImageServiceBll var
  • React Native Flatlist 不会在自定义动画底部表内滚动

    我创建了一张自定义动画底部表 用户可以上下移动底部滚动条 在我的底部工作表中 我使用了 flatList 来获取数据并将项目呈现为卡片 到目前为止 一切都按预期工作 但我遇到了平面列表滚动问题 在底部工作表内 平面列表不会滚动 我已经硬编码
  • Selenium 打开未登录 Chrome 帐户的 chrome

    我最近一直在使用 Selenium WebDriver 我还专门使用 chromedriver 每当我打开一个新的 chrome 窗口 driver get url 时 Chrome 都会以完全默认的状态启动 而不是我刚刚从我的扩展坞打开一
  • Qt 编译器标志顺序

    我的目标是消除某些类型的编译器警告 我发现可以通过在 pro 文件中添加编译器标志来做到这一点 QMAKE CXXFLAGS Wno unused variable Wno reorder 问题是它们被添加在 Qt 构建系统生成的标志之前
  • 您可以将委托函数作为可选参数传递吗?

    我知道在 Visual Basic 中 委托函数不能contain可选参数 但是方法可以将委托作为可选参数吗 我想做的是这样的 Delegate Sub MyDelegate ByVal input As String Sub MyDele
  • 在许多驱动程序文件夹中创建 build-in.o

    我正在用我的自定义驱动程序构建内核 成功构建后 我发现了许多 build in o 文件 任何人都可以详细说明这些文件是如何在这里结束的吗 我只能怀疑这些与更高级别的 makefile 有关 built in o 文件是未构建为模块的内核的
  • 如何使用 env 变量作为 github actions 中输入的默认值?

    我有一个 github 操作 它有一个输入 该输入应该具有基于 env variable 的默认值 因为 github actions 不支持环境变量default字段 我想知道是否可以在我的 action yml 文件的步骤部分中重新分配
  • C# 组件事件?

    我正在尝试编写一个将公开事件的 C 组件 该组件将由非托管 C 应用程序导入 根据一些教程 我想出了这段代码 针对 C 端 namespace COMTest ComVisible true Guid 02271CDF BDB9 4cfe