Не удается создать COM-объект PetroSIM в Mathematica - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь вызвать Petro-SIM из Mathematica с помощью следующей команды:

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 голосов
/ 08 января 2019

Сначала необходимо убедиться, что 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
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...