Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите!!! Error - Не был произведен вызов CoInitialize


SamProf ©   (2007-02-28 00:31:00) 

Доброго вечера, мастера! Прошу помощи, бо уже не можу....
Суть проэкта: проэкт на IntraWeb, на нём 2 кнопочки, при нажати  
1 кнопочку) мы соединяемся посредством OLE к 1С:Предприятию
2 кнопочку) мы получаем список товаров и выводим из в список.... Итак вот модуль:
unit Unit1;

interface

uses
 Classes, SysUtils, IWAppForm, IWApplication, IWColor, IWTypes, Controls,
 IWVCLBaseControl, IWBaseControl, IWBaseHTMLControl, IWControl, IWCompButton,
 ComObj, Variants,ActiveX, IWHTMLControls;

type
 TIWForm1 = class(TIWAppForm)
   IWButton1: TIWButton;
   IWButton2: TIWButton;
   IWList1: TIWList;
   procedure IWButton2Click(Sender: TObject);
   procedure IWButton1Click(Sender: TObject);
 public
 end;
var
 C1: Olevariant;
implementation
{$R *.dfm}
procedure TIWForm1.IWButton1Click(Sender: TObject);
begin
 C1 := createoleobject('V1CEnterprise.Application');
 C1.initialize(c1.rmtrade, '/DD:\PROGRAM\DAKO\1с\', '');
end;

procedure TIWForm1.IWButton2Click(Sender: TObject);
var
 t:OleVariant;
begin
 IWList1.Clear;
 t:=C1.CreateObject('Справочник.Товары');
 t.selectitems(1);
 while t.getitem(1)=1 do
   begin
   IWList1.Items.Add(t.getAttrib('Наименование'));
   end;
end;

initialization
 TIWForm1.SetAsMainForm;
end.


Так вот при нажатии на первую кнопочку мы имеем ошибку:
Не был произведен вызов CoInitialize.
Пошаря в просторах интернета я нашёл, что надо писать   CoInitializeEx(nil,COINIT_APARTMENTTHREADED); и получилось вот что: procedure TIWForm1.IWButton1Click(Sender: TObject);
begin
 CoInitializeEx(nil,COINIT_APARTMENTTHREADED);
 C1 := createoleobject('V1CEnterprise.Application');
 C1.initialize(c1.rmtrade, '/DD:\PROGRAM\DAKO\1с\', '');
end;
и ура - заработало, но при нажатии на вторую кнопочку я получаю эррор:'Объект не подключен к серверу'....
я понял, что каждое нажатие кнопочки - в отдельном потоке и в этом проблема...

Много текста получилось.... Посоветуйте чтонить!!! Пожалуйста!!!!


DrPass   (2007-02-28 13:24:00) [1]


> ошибка на строчке cc1:= GetActiveOleObject('V1CEnterprise.
> Application');

Ну так тебе и надо же проверять - делать GetActiveOleObject, и если такого активного объекта нет, то создавать новый


Сергей М.   (2007-02-28 13:01:00) [2]


> SamProf ©   (28.02.07 12:36) [6]


Значит в этот момент нет ни одного существующего объекта указанного тобой класса


SamProf   (2007-02-28 12:36:00) [3]

Я ошибся - ошибка на строчке cc1:= GetActiveOleObject('V1CEnterprise.Application');


Сергей М.   (2007-02-28 11:54:00) [4]

А у меня не пишет.

Что я неправильно делаю ?


SamProf   (2007-02-28 10:44:00) [5]

CoInitializeEx(nil,COINIT_APARTMENTTHREADED);
cc1:= GetActiveOleObject('V1CEnterprise.Application');
 IWList1.Clear;
 t:=Cc1.CreateObject('Справочник.Товары');
 t.selectitems(1);
 while t.getitem(1)=1 do
   begin
   IWList1.Items.Add(t.getAttrib('Наименование'));
   end;


На строчке CoInitializeEx(nil,COINIT_APARTMENTTHREADED); пишет что Операция недоступна!


Сергей М.   (2007-02-28 09:01:00) [6]

см. GetActiveOleObject


SamProf   (2007-02-28 02:23:00) [7]

Спасибо, но есть проблема. при каждом нажатии кнопочки будет стртовать новый экземпляр 1С, что происходит порядка .... 20-30 секунд.... а мне нужно чтобы 1С запускалась тока 1 раз и из неё черпальсь данные из разных потоков......


DrPass   (2007-02-28 01:34:00) [8]


> я понял, что каждое нажатие кнопочки - в отдельном потоке
> и в этом проблема...

Правильно понял
Ну так и пиши программу с учетом этого -
CoInitialize(nil);
C1 := createoleobject('V1CEnterprise.Application');
C1.initialize(c1.rmtrade, '/DD:\PROGRAM\DAKO\1с\', '');
IWList1.Clear;
t:=C1.CreateObject('Справочник.Товары');
t.selectitems(1);
while t.getitem(1)=1 do
  begin
  IWList1.Items.Add(t.getAttrib('Наименование'));
  end;
CoUninitialize;


Наверх

Титульная страница Поиск, карта сайта Написать письмо