Re: Передача активного модуля в DLL

Добрый день.

Пишу собственный модуль на Delphi. Перерыл всю информацию, что есть на данном форуме, и в результате у меня получилось следующее:

1. В Delphi создал ActiveX Library, добавил к ней Automation Object и в библиотеке типов добавил метод Run(TCSApp, TCSActiveModule: OleVariant)
2. Затем к проекту добавил форму TForm, в которой объявил два поля:

    TCSApp: CSDN_TLB.TCS_Application;
    TCSActiveModule: CSDN_TLB.ProductionBOMStructure;

3. Далее, в TCS написал макрос:


Sub FormMacro_mytest(TCSActiveModule)
  Dim X               
  Dim un
  LogObject.ScriptTimeOut = 0
  un = TCSApp.LoginUserName
  Set X = CreateObject("PrCost.PrimeCost")
  Call X.Run(TCSApp, TCSActiveModule)
End Sub

4. Реализация метода Run


procedure TMyTest.Run(TCSApp, TCSActiveModule: OleVariant);
begin
  fmMain := TfmMain.Create(Application);
  try
    if not Supports(TCSApp, IID_ITcs_Application, fmMain.TCSApp) then
      raise Exception.Create('Не связано с TCS!');
    if not Supports(TCSActiveModule, IID_IProductionBOMStructure, fmMain.TCSActiveModule) then
      raise Exception.Create('Не передан текущий модуль TCS!');
    fmMain.ShowModal;
  except on E: Exception do
    begin
      Application.MessageBox(PAnsiChar(E.Message),'Ошибка');
      fmMain.Free;
      Exit;
    end;
  end;
  fmMain.Free;
end;

При запуске всего этого хозяйства преобразование типа OleVariant в ITcs_Application проходит нормально а вот при попытке преобразования в IProductionBOMStructure функция Supports выдает ошибку:  Could not convert variant of type (By Ref Variant) into type (Unknown)
Где тут грабли?
ЗЫ: Пробовал преобразовывать в IModule - та же самая ошибка

Re: Передача активного модуля в DLL

попробуйте не передавать модуль, а получать его из TCSApp


IOcs_Application2.ActiveModule (PropertyGet)

--------------------------------------------------------------------------------

Получить активный модуль TechnologiCS

Синтаксис:

objectvariable.ActiveModule

objectvariable - IOcs_Application2

Возвращает: IModule