VC++ 6.0에서 확장 dll을 만들었습니다.
이 dll을 델파이에서 호출을 하는데...
dll 내부 기능은 다 수행한 다음에 Access violation 에러가 발생합니다.
dll에서 메모리도 다 해제했고... 왜 에러가 나는지 모르겠네요...
메모리가 다 해제되지 않아서 그런건가요...
제발 답변 부탁드립니다.
감사합니다.
아래에 델파이 소스를 올립니다.
type
TDLL = procedure( nSYear : Integer ; nEYear : Integer ) ; stdcall ;
procedure TForm1.Button1Click(Sender: TObject);
var
hHandle : THandle ;
gDll: TDLL ;
begin
hHandle := LoadLibrary( 'global.dll' ) ;
if hHandle <> 0 then
begin
@gDll:= GetProcAddress( hHandle, 'SetInfo' ) ;
gDll( 1971, 2031 ) ;
end ;
FreeLibrary( hHandle ) ;
end;
일단 예전에 이런 Access에러는 인자 선언에서도 일어납니다.
C에서 procedure 인자중 포인터형 *로 있는것은 델파이에선
포인터형 또는 VAR로 선언해서 사용하는것과 비슷해서요
먼저 C의 원형을 확인해서 (int *nSYear,......)일경우는
델에서 ( Var nSYear : Integer ;....)이렇게 선언하구요
사용시는 상수가 아닌 변수로 넘겨보세요.
var
v1, v2 : integer;
......
v1 := 1971;
v2 := 2031;
gDll( v1, v2 ) ;
위 경우가 아닐경우는....
hsr/////////////////////////////////////////////