![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите!!! 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;