.NET 中的 CoCreateInstance 完全匹配吗?

2024-04-25

我有进程内 (DLL) COM 服务器,但我选择以 DllSurrogate 身份运行,因此从非托管代码 (Delphi) 中我有:

function TComWrapper.GetServer: IUnknown;
begin
  OleCheck(CoCreateInstance(ServerData^.ClassId, nil, CLSCTX_LOCAL_SERVER, IUnknown, Result));
end;

现在正在使用 C#:

[DllImport("ole32.dll", EntryPoint = "CoCreateInstance", CallingConvention = CallingConvention.StdCall)]
static extern UInt32 CoCreateInstance([In, MarshalAs(UnmanagedType.LPStruct)] Guid rclsid,
   IntPtr pUnkOuter, UInt32 dwClsContext, [In, MarshalAs(UnmanagedType.LPStruct)] Guid riid,
   [MarshalAs(UnmanagedType.IUnknown)] out object rReturnedComObject);

...

            UInt32 dwRes = CoCreateInstance(ClassIdGuid,
                                            IntPtr.Zero,
                                            (uint)(CLSCTX.CLSCTX_LOCAL_SERVER), //if OR with CLSCTX_INPROC_SERVER then INPROC Server will be created, because of DLL COM Server
                                            IUnknownGuid,
                                            out instance);

上面的代码是不安全的。 上面是否存在安全版本CoCreateInstance? 看起来Activator.CreateInstance对我没有帮助。我必须显式设置运行上下文(第三个参数)


你也可以这样做:

[ComImport]
[Guid(YourGuidGoesHere)]
private class MyClass
{
}

并创建 COM 对象的实例,如下所示:

  IYourInterface myClass = (IYourInterface)(new MyClass());

不使用 p/invoke。

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

.NET 中的 CoCreateInstance 完全匹配吗? 的相关文章

  • 如何使构造函数只能由基类访问?

    如果我想要一个只能从子类访问的构造函数 我可以使用protected构造函数中的关键字 现在我想要相反的 我的子类应该有一个构造函数 该构造函数可以由其基类访问 但不能从任何其他类访问 这可能吗 这是我当前的代码 问题是子类有一个公共构造函
  • C - '=' 标记之前的预期表达式...在没有 '=' 的行上

    我疯狂地试图找出这个与现实 我的代码没有明显联系的错误消息 我一直在这里搜索并得出一个结论 你会讨厌 typedef 隐藏的指针 抱歉 这超出了我的控制范围 教授以这种方式提供了代码 我正在编辑问题中指定的代码 我弹出完整节点以避免每个推送
  • EntityFramework:“参数值超出范围。”

    我在 EntityFramework 模型优先 中保存小数时遇到问题 在我的 EDMX 中 我声明我的属性为 Decimal 30 10 然后我尝试保存该数字 1215867935736100000 结果是 Parameter value
  • g++.exe 和 x86_64-w64-mingw32-g++.exe 有什么区别?

    同样的问题也适用于 gcc ar 等 在 Code Blocks 中将工具链可执行文件从 Something exe 更改为 x86 64 w64 mingw32 something exe 时 代码仍然可以完美编译 此外 32 位和 64
  • 类模板的可变参数构造函数模板的特化

    这是一个带有可变参数构造函数的类 它专门用于从临时对象进行复制和移动 template
  • FileStream - “不支持给定路径的格式”

    我正在尝试使用EPPlus http epplus codeplex com 在我们的 LAN 上保存电子表格 我正在使用一个FileStream对象执行此操作 但是每当我尝试实例化该对象时 我都会收到错误 The given path s
  • 使用正在运行的进程的共享内存收集核心转储

    核心转储仅收集进程空间 而不收集为进程间通信创建的共享内存 如何使核心转储也包含正在运行的进程的共享内存 设置核心文件过滤器 proc PID coredump filter per http man7 org linux man page
  • 策略模式的现实示例

    我一直在读关于OCP原理 http en wikipedia org wiki Open closed principle以及如何使用策略模式来实现这一目标 我打算尝试向几个人解释这一点 但我能想到的唯一例子是根据 订单 的状态使用不同的验
  • .NET 配置(app.config/web.config/settings.settings)

    我有一个 NET 应用程序 它具有用于调试和发布版本的不同配置文件 例如 调试 app config 文件指向开发SQL服务器 http en wikipedia org wiki Microsoft SQL Server它启用了调试并且发
  • 引用计数指针的STL类?

    这应该是微不足道的 但我似乎找不到它 除非不存在这样的类 智能指针的 STL 类 或类集 是什么 UPDATE 感谢您的回复 我必须说我很惊讶没有标准实施 我最终使用了这个 http archive gamedev net referenc
  • 在 QtCreator 中查看数组内容

    调试时是否可以在 Qt Creator 中查看数组的内容 似乎检测到我的数组是一个数组而不是一个指针 此外 我可以点击一个箭头 就像展开一样 但之后什么也没有显示 当我试穿的时候std vector Qt Creator 设法按预期显示内容
  • 在 Winforms 中,PreviewKeyDown() 从未针对任何键触发

    我最初试图让我的程序获取箭头键 上 下 左 右 的输入 但发现在 KeyDown 中这些键从未出现过 后来我发现我可以通过进入 PreviewKeyDown 函数并设置来启用箭头键 e IsInputKey true 及其周围的任何条件和逻
  • 如何使用实体框架更新特定记录的一个字段?

    我想要更新一个名叫 Pejman 的人的家庭情况 这是我的对象类 public class Person public int Id get set public string FirstName get set public string
  • invoke_result获取模板成员函数的返回类型

    如何获取模板成员函数的结果类型 下面的最小示例说明了该问题 include
  • 列表框显示类名称而不是值

    我正在开发一个项目 其中用户应该向动物输入值 名称 年龄 性别等 并且用户输入的值应该显示在列表框中 这些类相互继承 以下是继承的工作原理 Animalclass 是所有类的父类 Mammal类继承自Animal class Dog类继承自
  • 为什么这些双精度数的返回值为-1.#IND?

    I have double score cvMatchContourTrees CT1 CT2 CV CONTOUR TREES MATCH I1 0 0 cout lt
  • 有没有 C# 到 C 的转换工具? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我知道 C 与 NET Framework 不同 C 是一种符合 ECMA ECMA 334 和 ISO
  • 如何检查多个变量是否等于同一值?

    如何比较多个项目 例如 我希望检查所有变量 A B 和 C 是否都等于字符 X 或所有三个变量都等于 O 如果其中 2 个为 X 1 个为 O 则应返回 false I tried if A B C X A B C O Do whateve
  • C 警告函数调用中缺少标记

    这是我的警告 Missing sentinel in function call 我怎样才能删除它 我正在使用 linux 和 gcc 编译器 看来您可能没有终止数组声明NULL 如果没有 null 您可能会遇到一些内存怪异 因为运行时将不
  • 是否有将二进制数据打包成 UTF-16 字符串的标准技术?

    在 NET中 我有任意二进制数据存储在byte 例如图像 现在 我需要将该数据存储在string 旧 API 的 注释 字段 有没有标准技术packing将此二进制数据转换为string 我所说的 打包 是指对于任何相当大且随机的数据集 字

随机推荐

  • GoDaddy Linux 上的 PHP 共享尝试通过 GMAIL SMTP 发送

    我已经尝试过 StackOverflow 和其他网站上发布的每一个脚本 代码 方法 但没有运气 我在 GoDaddy 上托管 我已经设置了一个 Google App 帐户 设置了 MX 记录所需的一切 使用 GoDaddy 工具 甚至尝试从
  • 在没有未定义行为的情况下,哪些 float 值无法转换为 int [c++]?

    我刚刚从 C 14 标准中读到了这个 我的重点 4 9 浮点积分转换 conv fpint 1浮点类型的纯右值可以转换为整数类型的纯右值 转换截断 也就是说 小数部分被丢弃 如果无法截断值 则行为未定义 以目标类型表示 这让我思考 其中 如
  • jQueryUI 可拖动 + 可排序错误(无法读取未定义的属性“选项”)

    我的问题似乎类似于这个问题 从可排序列表拖动到拖放插件 https stackoverflow com questions 17928139 dragging from a sortable list to a drag and drop
  • 如何从 ispell 私人词典中删除条目?

    我想知道如何从 ispell 私人词典中删除一个 错误插入的 条目 单词 EDIT 经过更多挖掘后 我仍然无法从默认字典中删除条目 但我认为解决方案可能是构建哈希程序 问题是生成要删除的条目列表 我找不到简单的示例 您应该能够编辑您的个人词
  • 使用 Shell 脚本自动安装 R-Studio

    有没有办法在 Linux 系统上自动安装 R Studio 它应该自动检测操作系统并安装具有所需依赖项的 R 和 R Studio 谢谢 我准备了以下 shell 脚本来使安装完全自动化 bin bash Program R Studio
  • 使用 Retrofit 通过 GSON 获取嵌套 JSON 对象

    我正在使用 Android 应用程序中的 API 所有 JSON 响应如下所示 status OK reason Everything was fine content lt some data here gt 问题是我所有的 POJO 都
  • 在 JavaScript 中动态创建 SVG 链接

    我正在从 JavaScript 动态创建 SVG 元素 它对于像矩形这样的视觉对象工作得很好 但是我在生成功能性的 xlinks 时遇到了麻烦 在下面的示例中 第一个矩形 静态定义 在单击时可以正常工作 但其他两个 用 JavaScript
  • Oracle SQL Regexp_replace 匹配

    这是我需要完成的一个时髦的匹配 A5 1 9 11 2 需要成为 A05 01 09 11 02 DOT 部分的数量从没有到很多不等 字母 A 将始终存在并且始终为 1 个字符 我想使用 regexp replace 函数 以便将其用作排序
  • 检查节点js中特定时区的午夜

    比方说 我有用户的时区 时区 America New York 我想根据用户的时区在午夜执行一些任务 如何检查该时区是否已到达午夜 特定时区的最后午夜 new Date new Date toLocaleDateString en US t
  • 结束两个对等方之间的 WebRTC 视频通话

    我已经使用以下命令在两个同伴之间建立了视频聊天WebRTC 我想让一个对等方结束聊天 并让另一个对等方知道聊天已结束 聊天结束后 需要为双方执行一些代码 这PeerConnection对象有一个removeStream 应该触发的方法onr
  • 颤振中的全宽浮动操作按钮? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 如何在不使用颤动屏幕底部填充的情况下实现全宽浮动操作按钮 您可以使用不同的方法 您可以使用堆栈实现相同的
  • C# 计算并验证 SEPA (XML) 付款文件的 SHA256 值

    我正在与马库斯 德雷尔 Markus Dreyer 一样面临同样的问题 C 计算 SEPA XML 付款文件的 SHA256 值 https stackoverflow com questions 18254277 c sharp calc
  • SSMS:在脚本中选择字符串时突出显示相同的文字

    在 Visual Studio 中 当我选择任何文字时 它会突出显示同一文字的所有出现位置 SQL Server Management Studio中有类似的功能吗 假设我的脚本中有 My Temp Table 当选择文字 My Temp
  • 云集成:创建项目时出错。请重试

    我创建了一个新的 GAE 应用程序 但 设置 页面上的 云集成 部分告诉我 创建项目时发生错误 请重试 我在几个小时内多次按下 重试 按钮 但它不起作用 我发现 它反复说问题已解决 但对我来说还没有解决 有人来自 Google 监控这个论坛
  • 使用 grunt 从 browserify 生成源映射

    我已按照此处的说明进行操作 https www npmjs org package grunt browserify https www npmjs org package grunt browserify 尝试在 grunt 上为 bro
  • Aurelia Post 使用 http-fetch-client 生成选项请求

    我正在创建一个小型论坛 我们公司的人员可以使用 aurelia 为他们想要即时销售的商品或服务发布广告 我有一个广告页面列表 工作正常 每个广告的详细信息页面都工作正常 都使用来自 api 的 get 请求 然而 当有人想在广告上添加评论时
  • 删除列表中不包含另一个列表中出现的子字符串的项目的优雅方法

    最近我遇到了这个问题 假设有一个我要处理的内容列表 process list test fruit apple test fruit pineapple test fruit banana test tech apple pen test
  • 如何使用 antd upload React 发送 multipart/form-data

    我正在使用 React 和 antd 我使用的 antd 组件是拖放 https ant design components upload 我正在尝试使用 FormData 对象发送多部分 表单数据 它发送文件 应作为 blob 发送的 z
  • 有什么方法可以更改 VSCode 中仅注释代码的字体系列吗?

    我在用户设置中遇到过这个 editor fontFamily Consolas Courier New monospace 但有什么办法只改变评论的字体吗 我在其他编辑器中看到人们有半草书评论 我希望能够复制类似的内容 您可以更改字体sty
  • .NET 中的 CoCreateInstance 完全匹配吗?

    我有进程内 DLL COM 服务器 但我选择以 DllSurrogate 身份运行 因此从非托管代码 Delphi 中我有 function TComWrapper GetServer IUnknown begin OleCheck CoC