在Mathematica中创建PetroSIM COM对象失败

时间:2019-01-07 19:34:14

标签: .net com wolfram-mathematica

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

petrosim = CreateCOMObject["PetroSIM.Application"];

这将返回以下错误消息:

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以及这些事情一无所知,到目前为止,我在互联网上发现的所有问题都无济于事。您是否知道此问题的来源?预先感谢!

1 个答案:

答案 0 :(得分:1)

首先,您需要验证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
{
}