Autor Beitrag
Ravy
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 09.11.07 15:46 
Hallo Liebe Delphi Gemeinde,

ich hab ein Problem mit meiner Com-Bibliothek. Beim Aufrufen der Funktion Reg_ReadString (wie nachfolgend deklariert) soll ein String-Parameter an den Aufrufer zurückgegeben werden. Wird die Biblothek mit dem Objekt (PrivilegedAccess) als In-Process-Server initiert gibts keine Probleme. Bei Initierung als Out-Process-Server erhalte ich eine Access-Violation wenn ich den ausgelesenen String in "Value" zurückschreiben möchte. Hat jemand eine Idee wo der Fehler liegt?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
function TPrivilegedAccess.Reg_ReadString(RootKey: SYSUINT; Key, Name: PChar; out Value: PChar; Buffsize: Integer): HResult;
var
  S : String;  
begin
  S := 'Test';
  Result := Min(BuffSize, Length(S));
  Move(S[1], Value^, Result); //Hier ist die Access-Violation bei Out-Process-Server
end;
Ravy Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 09.11.07 17:22 
Titel: Problem erledigt
Ok, habe selber rausgefunden wie es funktioniert. Statt einem LPSTR Parameter verwende ich jetzt eine OleVariant Variable.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
function TPrivilegedAccess.Reg_ReadString(RootKey: SYSUINT; Key, Name: PChar; var Value: OleVariant): HResult;
var
  S : String;
  P : PChar;
begin
  S := 'Test';
  Result := Length(S);
  if Result > 0 then
  begin
    Value := VarArrayCreate([0, Result], varByte);
    P := VarArrayLock(Value);
    try
      Move(S[1], P^, Result);
    finally
      VarArrayUnlock(Value);
    end;
  end;
end;