在 Mathematica 中创建 PetroSIM COM 对象失败

Creating PetroSIM COM-object in Mathematica fails

我正在尝试使用以下命令从 Mathematica 调用 Petro-SIM:

petrosim = CreateCOMObject["PetroSIM.Application"];

此 returns 以下错误消息:

CreateCOMObject::netexcptn: A .NET exception occurred: 
System.Runtime.InteropServices.COMException (0x800401F3):
Ungültige Klassenzeichenfolge (Ausnahme von HRESULT: 0x800401F3 (CO_E_CLASSSTRING)) bei System.RuntimeType.GetTypeFromProgIDImpl(String progID, String server, Boolean throwOnError) bei Wolfram.NETLink.Internal.COM.COMUtilities.createCOMObject(String clsIDOrProgID) bei Wolfram.NETLink.Internal.CallPacketHandler.createCOM(KernelLinkImpl ml).

对不起德语,最后一行应该翻译成这样:

Invalid string-class (Exception of HRESULT: 0x800401F3 (CO_E_CLASSSTRING)) at System.RuntimeType.GetTypeFromProgIDImpl(String progID, String server, Boolean throwOnError) at Wolfram.NETLink.Internal.COM.COMUtilities.createCOMObject(String clsIDOrProgID) at Wolfram.NETLink.Internal.CallPacketHandler.createCOM(KernelLinkImpl ml).

我在另一台计算机上使用相同的 Mathematica 版本和 Petro-Sim 版本并且运行良好。我对 .NET 和这些东西一无所知,到目前为止我在互联网上发现的所有问题都无济于事。你知道这个问题是从哪里来的吗?提前致谢!

首先您需要验证 HKCR\PetroSIM.Application 在注册表中。然后验证 CLSID 是否在注册表中,然后验证应用程序是否已安装。

您可以验证运行 这个 Powershell 宏,它将提供相关信息:

param
(
 [Parameter(Mandatory=$true)] [string]  $ProgId
)

$ProgIdPath = join-path "hklm:\software\classes" $ProgId

$ProgIdPath = join-path $ProgIdPath "CLSID"

Try
{
    $ProgIdEntry = gi $ProgIdPath

    $CLSID = $ProgIdEntry.GetValue("")

    Write-Host "CLSID: " $CLSID

    $CLSIDPath = join-path "hklm:\software\classes\clsid" $CLSID

    $CLSIDEntry = gi -path $CLSIDPath

    ls $CLSIDEntry.PSPath
}
Catch
{
}