delphi写windows程序使用unidac连接sqlserver2000时报错OLE DB error occured. Code 800401F0h查资料后,搜到如下解决方法:
服务单元引入activex单元,然后在服务执行函数中加入
CoInitializeEx(NIL,COINIT_MULTITHREADED);
CoUnInitialize;
procedure TService.ServiceExecute(Sender: TService);
begin
CoInitializeEx(NIL,COINIT_MULTITHREADED);
..
// your code
..
CoUnInitialize;
end;
另外这两天用多线程调用c#的动态库,发现在线程的执行过程里边也要做上述处理,不然会报com未初始化的错误
procedure TFindThread.Execute;
var
lobj: TTFindImage;
isFind: boolean;
begin
CoInitializeEx(nil,0);
FLog.add('线程' + inttostr(FIdx) + '开始执行');
FLog.Add('大图:' + FBigImg);
FLog.Add('小图:' + FLittleImg);
lobj := TTFindImage.Create(nil);
isFind := (lobj.DefaultInterface as IFindImage).FindPostion(FBigImg, FLittleImg, '', 0);
if isFind then FLog.Add('线程' + inttostr(FIdx) + '定位到小图')
else FLog.Add('线程' + inttostr(FIdx) + '未定位到小图');
FLog.add('线程' + inttostr(FIdx) + '执行结束');
lobj := nil;
CoUnInitialize;
end;