안녕하세요. 델파이세상(http://www.freechal.com/delphiworld)의 최용일입니다.
dll에선 string사용하지 마세요. 특히 함수리턴값엔... 그냥 PChar를 사용하세요.
델파이의 메모리 관리땜에 그러는데 ShareMem유닛을 추가하는 것보다는 string대신에
PChar를 사용하는것이 더 좋습니다.
^^ 항상 즐코하세요.
강신구 wrote:
> 안녕하세요..
>
> 레지스트리에서 Key를 읽어오는 루틴을 DLL로 만들니깐.. 에러가 납니다..
> 에러메시지는 "Invalid Pointer Operation'이구요..
>
> DLL 화일은 아래와 같습니다..
>
> library mydll;
>
> uses
> SysUtils,
> Classes,
> Registry,
> Windows;
>
>
> {$R *.RES}
>
> function ReadRegistry: string; export; stdcall;
> var
> tReg: TRegistry;
> tStr: string;
> begin
> tStr := '';
> tReg := TRegistry.Create;
>
> with tReg do
> begin
> RootKey := HKEY_CURRENT_USER;
> if OpenKey('SOFTWAREMyApp', False) then
> tStr := ReadString('AccessCode');
> end;
>
> Result := tStr;
> end;
>
> export ReadRegistry;
>
> begin
> end.
>
> 그리고.. Application은 아래와 같습니다..
>
> implementation
>
> function ReadRegistry: string; stdcall; external 'mydll.dll';
>
> {$R *.DFM}
>
> procedure TForm1.Button1Click(Sender: TObject);
> begin
> Label1.Caption := ReadRegistry;
> end;
>
> DLL로 만들기 전에 Button1Click procedure에 DLL루틴을 넣어서 테스트 후에 DLL로 만들었거든요..
>
> DLL루틴에서 tReg를 create, openkey후 closekey, free해도 마찬가지더군요..
>
> 제가 어떤부분에서 잘못했는 조언 부탁드립니다..