在 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
{
}
我正在尝试使用以下命令从 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
{
}