Форум: "Corba";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];
Внизinproc com-server Найти похожие ветки
← →
kblc © (2005-09-07 21:14) [0]Уважаемые мастера, помогите пожалуйста решить проблему.
У меня есть фабрика классов, с помошью котороя я создаю единственную копию COM-сервера (inproc).
т.е. у меня есть COM-сервер (TVARSERVER)// инициализируется при
IServer = interface
function ExecFunc(const Parameters: Widestring; var sResult: Widestring): HRESULT; stdcall;
...
end;
TIServer = class(TComObject, IServer)
...
protected
function ExecFunc(const Parameters: Widestring; var sResult: Widestring): HRESULT; virtual; stdcall;
...
end;
TVARServer = class(TIServer)
...
protected
function ExecFunc(const Parameters: Widestring; var sResult: Widestring): HRESULT; override;
...
end;
function TVARServer.GetVariable(const sGroup, sName: string; var sResult: WideString): boolean;
var
NewLng, n: Integer;
Buff: array[0..65535] of byte;
TmpStr: string;
begin
Result:=FALSE;
if Assigned(Reg) then
try
if Reg.OpenKey(prRegistryKey+"\"+sGroup,FALSE) then
if Reg.ValueExists(sName) then
begin
case Reg.GetDataType(sName) of
rdBinary:
begin
NewLng:=Reg.ReadBinaryData(sName,Buff,High(Buff));
TmpStr:="";
if NewLng>0 then
begin
for n:=0 to NewLng-1 do TmpStr:=TmpStr+char(Buff[n]);
sResult:=DeCrypt(TmpStr);
end;
end;
rdString:
begin
sResult:=Reg.ReadString(sName);
end;
end;
Result:=TRUE;
Reg.CloseKey;
end else
prLastError:=".";
except
on E: Exception do
prLastError:=".."+E.Message;
end else
prLastError:="...";
end;
Reg: TResistry;procedure Initialize; override;
В функцииExecFunc()
при некоторых условиях выполняетсяGetVariable()
;
Когда к нему обращаются COM-сервера унаследованные от TIServer, то всё рпоходит хорошо, а если к нему обратился какой-либо другой сервер, то на командеReg.OpenKey();
вываливается исключение (Access Violation at address * in Module varserver.dll; Write at address *
)
С чем это может быть связано?
← →
kblc © (2005-09-07 22:07) [1]Я был немного не прав.
Сейчас передел все сервера, унаследовал их от одного, создаю одной фабрикой - и всё равно: итог тот же самый.
Все сервера запускаются внутри одного процесса (клиента).
Помогите пожалуйста!
← →
Попов Виталий (2005-09-08 15:06) [2]Попробуй объявить Reg в процедуре GetVariable, в ней же создавай и уничтожай (Reg.Free).
← →
Erik1 © (2005-09-15 15:38) [3]А можеш вобще выкинуть TResistry и работать API функциями.
Страницы: 1 вся ветка
Форум: "Corba";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.043 c