c++ - 使用免注册 COM 时 Powershell 无法使用 COM 对象

标签 c++ windows powershell com registration-free-com

我正在尝试在 powershell 中以免注册的方式使用 COM 对象。我的组件是 x86,poweshell_ise.exe 也是 x86。

为此,我为基于 dll 的 com 服务器创建了 list :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
   <assemblyIdentity name="ComComponent" processorArchitecture="X86" type="win32" version="1.0.0.0"></assemblyIdentity>
   <file name="ComComponent.dll" hashalg="SHA1">
      <comClass clsid="{<CLASS_CLSID>}" tlbid="{<TLB_CLSID>}" progid="ComComponent.ComComponent" description="ComComponent Class"»
      <typelib tlbid="{<TLB_CLSID>}" version="1.0" resourceid="2" helpdir="" flags="HASDISKIMAGE"></typelib>
   </file>
</assembly>

以及 powershell 脚本的 list :

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" name="PSScript" type="win32" />
<dependency>
<dependentAssembly>
    <assemblyIdentity type="win32" name="ComComponent" version="1.0.0.0"
 processorArchitecture="x86" />
</dependentAssembly>
</dependency>
</assembly>

在 powershell 中,我按以下方式使用它:

$actctx = New-Object -COM Microsoft.Windows.ActCTX
$actctx.Manifest = "<path to manifest>"
$obj= $actctx.CreateObject("ComComponent.ComComponent")
$obj.ComMethod()

之后我收到以下错误:

Method invocation failed because [System.__ComObject] does not contain a method named 'ComMethod'.

我可以看到 ComComponent.dll加载到 powershell_ise.exe在进程资源管理器中。我还可以看到 powershell 出于某种原因正在尝试读取 HKCR\TypeLib\{<TLB_CLSID>}注册表项。

相同的功能在 powershell 中与注册的 COM 一起工作。我试图将类型库放入单独的文件中,结果相同。

可能是什么问题? 谢谢

最佳答案

我会尝试以下方法:

$myDll = Add-Type –memberDefinition @” 
    [DllImport("ComComponent.dll")] 
    public static extern bool myFunction(<parameters>);
“@ -name "myDll" -namespace Win32Functions –passThru

    $myDll::myFunction(<Parameters>) | Out-Null

关于c++ - 使用免注册 COM 时 Powershell 无法使用 COM 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56430549/

相关文章:

windows - Windows 上带有 pscp/plink 的 Emacs Tramp

python - pip install -U setuptools 使 windows 10 失败

powershell - 应用服务的 Azure 资源组模板 "Mobile App"

visual-studio-2010 - 是否可以在一条 CMD 行语句中设置多个环境变量?

C++ 自定义 vector 实现 - 指向不完整类型的指针的下标

c++ - 这个指针和性能损失

c++ - Invalidate(true) 没有输出,为什么?

regex - 正则表达式,删除最后一个正斜杠后的所有内容

c++ - 精炼 Haar 检测

c++ - boost::bind、boost::asio、boost::thread 和类