Как работать с RegExp в библиотеках? Дело в том, что библиотека
VBScript_RegExp_55_TLB — майкрософтская, без проблем тут не обошлось.
Вроде экземпляр объекта TRegExp создается, но при попытке с ним поработать вылазит ошибка:
Не был произведен вызов CoInitialize.
Если честно, столкнулась с этим впервые, пошла в интернет искать. Пришлось подключать
ActiveX и использовать
CoInitialize/CoUninitialize.
Нашла
статью про подобную проблему. Попробовала так:
var
...
RE : TRegExp;
NeedToUninitialize : Boolean;
begin
NeedToUninitialize := Succeeded(CoInitialize(nil));
try
RE := TRegExp.Create(nil);
RE.IgnoreCase := true;
RE.Multiline := true;
RE.Global := true;
...
finally
RE.Free;
if NeedToUninitialize then CoUninitialize;
end;
...
end;
Но и тут не заладилось: если
CoUninitialize писать без
try...except, то на нем вываливается. И что-то мне эта ситуация совсем не понравилась, как-то мутно: коинициализируется — а потом что? Не будет ли проблем, если работать с библиотекой в несколько потоков и т.д.? Даже если CoInitialize/CoUninitialize делать не в функции, а при регистрации либы.
Кто-нибудь из читателей блога сталкивался с чем-нибудь подобным? Как решали?
___
Чтобы быть в курсе обновлений блога, можно
подписаться на RSS.