Q&A

  • Re: DLL로 만드니깐 에러가 납니다
안녕하세요. 델파이세상(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해도 마찬가지더군요..

>

> 제가 어떤부분에서 잘못했는 조언 부탁드립니다..

0  COMMENTS