Powershell 中的 New-Object -ComObject 和 VB 中的 CreateObject() 有什么区别?

2023-12-05

我有一个关于 Windows PowerShell 在处理 Com Interop 时如何工作的问题。

我有一个第三方应用程序(我们称之为ThirdPartyApp)公开了一个我可以调用的 API。

我可以提前绑定它,例如Excel 或 Visual Studio 并“直接”与其对话。我可以在 VBScript 中后期绑定它,并且仍然“直接”与它对话。

我所说的“直接”是指我可以使用以下语法调用 API 公开的属性和方法:ThirdPartyApp.Name

所以在 VBScript 中我可以这样做:

Dim api : Set api = CreateObject("ThirdPartyApp.API")
WScript.Echo api.Name

在 PowerShell 中,当我这样做时:

$api =  New-Object -ComObject ThirdPartyApp.API

我必须使用以下语法来获取名称:

[System.__ComObject].InvokeMember('Name',[System.Reflection.BindingFlags]::GetProperty,$null,$api,$null)

现在,我明白这与如何ThirdPartyApp被建。

我知道这不是一个编码问题,我希望我不会立即被否决,但我的问题是:为什么在使用 Powershell 时我不能以 VBScript 方式与该程序集对话?如何New-Object -ComObject在 Powershell 中不同于CreateObject(identifier)在 VBScript 中?


给 Visual Basic 程序员的信息

Visual Basic 提供对自动化的全面支持。下表列出了 Visual Basic 语句如何转换为 OLE API。

Visual Basic 语句 OLE API

创建对象(“ProgID”)

  • CLSID来自ProgID

  • 共同创建实例

  • QueryInterface 获取 IDispatch 接口。

GetObject(“文件名”,“ProgID”)

  • CLSID来自ProgID

  • 共同创建实例

  • IPersistFile 接口的 QueryInterface。

  • 在 IPersistFile 接口上加载。

  • QueryInterface 获取 IDispatch 接口。

GetObject(“文件名”)\

  • CreateBindCtx 为后续函数创建绑定上下文。

  • MkParseDisplayName 返回 BindMoniker 的名字对象句柄。

  • BindMoniker 返回指向 IDispatch 接口的指针。

  • 释放名称手柄。

  • 根据上下文发布。

获取对象(“ProgID”)

  • CLSID来自ProgID

  • GetActiveObject 类 ID。

  • QueryInterface 获取 IDispatch 接口。

变暗x为新界面

  • 查找接口的 CLSID。

  • 共同创建实例

  • 查询接口

MSDN 库 2001 年 10 月 Microsoft Corp.

See https://learn.microsoft.com/en-us/windows/win32/api/combaseapi/

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

Powershell 中的 New-Object -ComObject 和 VB 中的 CreateObject() 有什么区别? 的相关文章

随机推荐

  • Java旋转像素数组

    我尝试用java编写一个算法来旋转二维像素数组 不限于90度 我遇到的唯一问题是 最终结果在图像中留下了点 孔 这是代码 for int x 0 x lt width x for int y 0 y lt height y int xp i
  • 当计算机程序运行时会发生什么?

    我知道一般理论 但我无法了解细节 我知道程序驻留在计算机的辅助存储器中 一旦程序开始执行 它就会被完全复制到 RAM 中 然后处理器一次检索一些指令 这取决于总线的大小 将它们放入寄存器中并执行它们 我还知道计算机程序使用两种内存 堆栈和堆
  • Android 的子类按钮:很多错误

    我尝试子类化Button 但是我在启动项目时遇到很多错误 你能看一下并告诉我如何解决这个问题吗 我可能会出现 50 个错误 package my project name import android public class MyButt
  • 查找函数无法更新特定位置的文件 - python

    我实际上正在开发一个使用 UDP 发送文件的项目 由于该协议不可靠 我在每个数据包上添加了一些信息 即数据的索引 这样我就可以按照正确的顺序写入接收到的数据 我在文件中的特定位置写入字节时遇到问题 这是我的代码中处理写入新数据的部分 whi
  • 用什么来代替 ::ng-deep

    我正在尝试以角度设置路由器出口放置的元素的样式 并希望确保生成的元素的宽度为 100 从大多数回复中 我发现我应该使用 ng deep选择器 但是来自 Angular 的docs它正在被弃用 有没有替代方案 ng deep FWIW 在我的
  • 十六进制字符串到图像

    我有一个十六进制字符串 如下所示 String hexImage 0xFFD8FFE000104A46494600010200006400640000FFEC00114475636B79000100040000003C 我需要使用 Java
  • 如何在asp.net中启用角色?

    我正在尝试在 ASP NET 中启用角色 但是 我收到了一些错误 并且在尽力之后我无法解决它们 我是 Visual Studio 界面的新手 我尝试创建一个登录页面作为 ASP NET Web 应用程序 然后 由于我们必须配置页面以连接到数
  • WP8 IE10 视口问题

    你们是否注意到 当使用 ms viewport 特定宽度为 320px 或设备宽度 时 Web 浏览器内容可以移动到可用空间之外 似乎文档大小错误 因此我可以将其内容滚动到左侧 但没有任何空白 我也可以将其缩小 但我不应该 之后它的大小并不
  • 使用ggplot2绘制不同颜色的多条线

    我有一个数据框 其中包含年份列 1980 2009 和 16 列 其中包含来自 16 个不同模型的气象数据 因此每个值代表一年和一个模型的年值 下面是一些代码 可以很容易地重现 set seed 20 df lt as data frame
  • 如何在显示表单后运行代码? (“显示”有问题。)

    我想Shown就是答案 但似乎并非所有控制都是平等的 一个面板is立即显示 而标签则不显示 我有以下代码 public partial class Form2 Form Panel p new Panel BackColor Color G
  • Ng-animate 停止使用 $templateRequest 装饰器工作

    当我的用户未经身份验证时 我试图避免使用 Angular js 出现模板错误 为了做到这一点 我来到了这个堆栈溢出解决方案 它对我有用 但现在我注意到我的 ng animate 停止工作而没有抛出控制台错误 我缺少什么 Update 这是使
  • if 语句中的布尔值

    今天 我收到了关于代码的评论 考虑到我在学校作业中检查变量是真还是假的方式 我写的代码是这样的 var booleanValue true function someFunction if booleanValue true return
  • oracle中需要修剪空格

    无法修剪表中以下数据中的空格 列数据类型为 VARCHAR2 650 CHAR 我尝试了修剪功能来消除空白 但这对我不起作用 我的表中的数据 xxxxxxxxxx yyyyyyyyy 12 7 14 12 13 14 xxxxxxxxxx
  • 分配给 BigInteger 数组中的 an 元素时出错

    这是我的代码 当我创建数组时它显示错误BigInteger并尝试赋值 package test import java math import java lang import java util public class Test pub
  • Tomcat工作目录必须定期清理

    我们的 Tomcat 遇到了一个问题 我的同事都无法真正解释 我们有一只雄猫 版本7 0 26 在 Linux 计算机上 部署是通过爆炸战争 我们的类是jar打包的 其余的直接进入WEB INF和META INF 另外还有一个内容管理服务器
  • Spring Security 6 和 JSP 视图渲染

    我正在将应用程序从 Spring Boot 2 7 升级到 Spring Boot 3 其中包括更新到 Spring Security 6 我们设置了以下属性 spring mvc view prefix WEB INF view spri
  • 从 RStudio EC2 实例中的 S3 读取大型 JSON 文件(Louis Aslett 的 AMI)

    我正在经历与这个问题类似的问题here 我在 AWS S3 上有一个大的 JSON 文件 并尝试通过 RStudio 来自 Louis Aslett 的 AMI 的 EC2 实例 访问它 我什至尝试从 t2 迁移到具有 30GB 内存的 r
  • 使用 CSS 变换倾斜后应用于位置 div 的边距

    可能比 CSS 更多的数学知识 但我正在尝试确定一种在应用 CSS skewY 变换后调整 div 位置的方法 在下面的代码片段中 带有蓝色边框的 div 应用了 3 5 度的倾斜度 我想知道是否有数学方法可以知道倾斜度是多少top应用于蓝
  • 序列化多部分表单请求以在 Play 2.1 上进行测试

    我正在为 play2 1 编写一个使用路由函数的多部分表单的后置控制器测试 route FakeRequest POST postControllerRoute url FakeHeaders Seq HeaderNames CONTENT
  • Powershell 中的 New-Object -ComObject 和 VB 中的 CreateObject() 有什么区别?

    我有一个关于 Windows PowerShell 在处理 Com Interop 时如何工作的问题 我有一个第三方应用程序 我们称之为ThirdPartyApp 公开了一个我可以调用的 API 我可以提前绑定它 例如Excel 或 Vis