Форум: "Основная";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
ВнизПомогите!!! Error - Не был произведен вызов CoInitialize Найти похожие ветки
← →
SamProf © (2007-02-28 00:31) [0]Доброго вечера, мастера! Прошу помощи, бо уже не можу....
Суть проэкта: проэкт на 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 01:34) [1]
> я понял, что каждое нажатие кнопочки - в отдельном потоке
> и в этом проблема...
Правильно понял
Ну так и пиши программу с учетом этого -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;
← →
SamProf © (2007-02-28 02:23) [2]Спасибо, но есть проблема. при каждом нажатии кнопочки будет стртовать новый экземпляр 1С, что происходит порядка .... 20-30 секунд.... а мне нужно чтобы 1С запускалась тока 1 раз и из неё черпальсь данные из разных потоков......
← →
Сергей М. © (2007-02-28 09:01) [3]см. GetActiveOleObject
← →
SamProf © (2007-02-28 10:44) [4]
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 11:54) [5]А у меня не пишет.
Что я неправильно делаю ?
← →
SamProf © (2007-02-28 12:36) [6]Я ошибся - ошибка на строчке cc1:= GetActiveOleObject("V1CEnterprise.Application");
← →
Сергей М. © (2007-02-28 13:01) [7]
> SamProf © (28.02.07 12:36) [6]
Значит в этот момент нет ни одного существующего объекта указанного тобой класса
← →
DrPass © (2007-02-28 13:24) [8]
> ошибка на строчке cc1:= GetActiveOleObject("V1CEnterprise.
> Application");
Ну так тебе и надо же проверять - делать GetActiveOleObject, и если такого активного объекта нет, то создавать новый
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.05 c