CoInitializeEx() - помогите

mbkeker
Дата: 06.12.2007 13:18:51
Господа написал dll которая выгоняет котировки в базу mysql через ODBC.

автор

library Project1;


uses
SysUtils,
Classes,
DB,
ADODB,
ActiveX;

{$R *.res}




function SQLconnect(Ask : integer; d_ask : integer; Bid:integer; d_bid:integer;
DU : integer; symbol : integer): integer; stdcall;
var ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
Ask_end: double;
Bid_end: double;
a:integer;
b,i:integer;
begin


CoInitializeEx(nil, COINIT_MULTITHREADED);
ADOConnection1:=TADOConnection.Create(nil);
ADOQuery1:=TADOQuery.Create(nil);
try
ADOConnection1.ConnectionString:='Моя строка';
ADOConnection1.Connected:=true;
ADOQuery1.Connection:=ADOConnection1;
a := 1;
for i := 1 to d_ask do a := a * 10;
b := 1;
for i := 1 to d_bid do b := b * 10;
Ask_end:=Ask/a;
Bid_end:=Bid/b;
ADOQuery1.SQL.Text:='update quotations Set DU='''+inttostr(DU)+''',Ask='''+floattostr(Ask_end)+''',Bid='''+floattostr(Bid_end)+''' where symbol='''+inttostr(symbol)+'''';
ADOQuery1.ExecSQL;
ADOConnection1.Connected:=false;
ADOConnection1.Close;
finally
ADOQuery1.Free;
ADOConnection1.Free;
CoUninitialize;
end;
Result:=1;
end;
exports SQLconnect;




begin
end.



Проблема в том что когда торговая платформа вызывает dll через некоторое время падает с критической ошибкой. Под XP работает мин 20 под 2003 сервер мин 2. Меня уверяют раработчики платформы что проблема в dll. Может вы мне посоветуйте что не так написанно?

Функция вызывается часто практически один раз в секунду.
Anatoly Podgoretsky
Дата: 06.12.2007 13:48:07
Про критическуй ошибку нам Лермонтов расскажет.
Кроик Семён
Дата: 06.12.2007 13:58:20
сложно сказать ...

может CoInitializeEx(nil, COINIT_MULTITHREADED) только один раз при загрузке библиотеки делать, а CoUninitialize вообще убрать?
Warstone
Дата: 06.12.2007 14:02:12
Anatoly Podgoretsky
Про критическуй ошибку нам Лермонтов расскажет.
Нет, щас медиумы в адекват войдут...
eNose
Дата: 06.12.2007 14:12:40
Кроик Семён
сложно сказать ...

может CoInitializeEx(nil, COINIT_MULTITHREADED) только один раз при загрузке библиотеки делать, а CoUninitialize вообще убрать?
в initialization и finalization/
eNose
Дата: 06.12.2007 14:13:51
вопрос: а оно там вообще нужно?
ни COM, ни OLE я не заметил (хотя мож чо и путаю)
Anatoly Podgoretsky
Дата: 06.12.2007 14:47:14
eNose
вопрос: а оно там вообще нужно?
ни COM, ни OLE я не заметил (хотя мож чо и путаю)

Плохо смотришь, а TADOConnection, а TADOQuery
eNose
Дата: 06.12.2007 15:18:44
Anatoly Podgoretsky
eNose
вопрос: а оно там вообще нужно?
ни COM, ни OLE я не заметил (хотя мож чо и путаю)

Плохо смотришь, а TADOConnection, а TADOQuery
и надо явно делать CoInitialize?
Anatoly Podgoretsky
Дата: 06.12.2007 15:32:28
eNose
Anatoly Podgoretsky
eNose
вопрос: а оно там вообще нужно?
ни COM, ни OLE я не заметил (хотя мож чо и путаю)

Плохо смотришь, а TADOConnection, а TADOQuery
и надо явно делать CoInitialize?

Только если в потоке или библиотеке.
eNose
Дата: 06.12.2007 15:34:59
Anatoly Podgoretsky
Только если в потоке или библиотеке.
посмотрел только что свои старые исходники: длл, АДОКоннекшн. и никаких CoInitialize/CoUninitialize.
работает.