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 - та же самая ошибка