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