Я пытался автоматизировать Grapher Golden Software (версия 15) с помощью C #. Руководство по программе на C ++ (однако файл выглядит старым, и я не уверен, что теперь оно применяется аналогичным образом) отмечает, что пользователь должен:
- Создать новый диалог AppWizardна основе приложения, используя все стандартные параметры.
- Измените основной ресурс диалога, чтобы он содержал желаемый пользовательский интерфейс. В этом примере кнопка «Выполнить и закрыть».
- Используйте мастер классов, чтобы добавить обработчик для кнопки «Выполнить».
- Запустите мастер классов, выберите «Добавить класс ...» из типаБиблиотека ...
- Библиотека типов Grapher содержится в файле grapher.tlb, поэтому выберите этот файл. Переименуйте классы по порядку: Документ, Рабочий лист, Приложение, Документы. Добавьте все классы.
Для меня это означало, что я пытался использовать ( после некоторого другого чтения ) команду tlbimp
в приглашении разработчика, которую я использовал дляпереведите файл «grapher.tlb» в «GrapherTypeLib.dll». Далее я использовал regasm
для регистрации этого файла (так как в некоторых местах , казалось, предполагал, что это необходимо).
Я добавил ссылку на GrapherTypeLib.dll в мой проект C # вместе с тем, чтобы он не вставлялся и имел локальную копию.
Однако с моим кодом:
using System;
using System.Data;
using GrapherTypeLib;
public class Grapher15
{
public Grapher15(Functions _function, string _data, DataTable _summary, IProgress<int> progress)
{
try
{
CreateProfiles(_data);
}
catch (Exception ex)
{
throw ex;
}
}
private void CreateProfiles(string _data)
{
// Create an instance which can work in the background
IAppObject _instance = new ApplicationClass();
_instance.Visible = true;
}
}
У меня всегда вылетает попытка создать приложение. Я должен отметить, что я пробовал различные варианты здесь, в том числе new Application()
, которые приводят к одному и тому же:
System.Runtime.InteropServices.COMException: 'Получение фабрики класса COM для компонента с CLSID{41F3A3D2-EAF3-42F0-9F62-A6E55F08F7E7} не удалось из-за следующей ошибки: 80040154 Класс не зарегистрирован (исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)). '
На основании моих выше проверок и правилЯ бы подумал, что все прописано правильно. Я должен отметить, что когда это началось, я также переустановил программу, чтобы убедиться, что все регистрации были выполнены правильно. Тем не менее, я тогда решил проверить regedit, и на самом деле, похоже, нет того CLSID, который он ищет:
Я начал расследование иИспользуя ildasm, я обнаружил, что этот GUID соответствует значению реестра для GrapherTypeLib.ApplicationClass
, которое, по-видимому, не зарегистрировано в списке regid. В то же время, ildasm отмечает, например, значение, отличное от GrapherTypeLib.Application
, от значения, указанного в приведенном выше списке regid.
Итак, для краткого заключения - кто-нибудь имеет представление о том, чточто-то не так?