Thread로 Powersocket과 Image 그리고 연결정보(Host,port, path등)를 넘겨주는 작업을 하는데....
Thread를 Create하자마자
Access Violation at address 004621CA in Module 'BTest.exe'. Write of address 00000030.
오류가 뜨는군요.....
아래는 소스입니다.
호출 Unit
---------
...
implementation
uses
uBThread;
Var
BThread : TBThread;
procedure TfrmMain.btnStartClick(Sender: TObject);
begin
....
BThread.Create(psk, Img, Host, Path, StrToInt(Port), StrToInt(WTime));
....
end;
....
이렇게 호출을 하고...
interface
uses
Dialogs, forms, Windows, Messages, SysUtils, Classes, Graphics,
Controls, ComCtrls, StdCtrls, Psock, ExtCtrls, JPEG;
type
TBNBCameraThread = class(TThread)
private
pskMySocket : TPowersock; // Power Socket Componemt
imgCamImg : TImage; // Image Componemt
strHost : String; // Connection IP
strPort : Integer; // Connection Port
strPath : String; // Connection Path
nWaitTime : Integer; // Sleep Time(1/1000 sec)
protected
procedure Execute; override;
public
constructor Create(PwSocket: TPowersock; Img: TImage; TargerURL: String; TargetPATH: String; TargetPort: Integer; refTime: integer);
end;
implementation
constructor TBNBCameraThread.Create(PwSocket: TPowersock; Img: TImage; TargerURL: String; TargetPATH: String; TargetPort: Integer; refTime: integer);
Begin
pskMySocket := PwSocket; <== 요부분에서 오류가 납니다.
imgCamImg := Img;
strHost := TargerURL;
strPort := TargetPort;
strPath := TargetPATH;
nWaitTime := refTime;
FreeOnTerminate:= TRUE;
inherited Create(False);
End;
....
단계적으로 따라가보면 소켓은 제대로 넘어가는데 pskMySocket이 초기화가 안된것 같은데...ㅠ.ㅠ
도대체 알수가 없어서 이렇게 도움을 요청합니다.
고수님들의 답변 부탁합니다.
참고로 컴파일시에는 오류가 없습니다. 실행시 나타나는군요...쩌비...ㅡ.ㅡ;;;
델파이는 원래 명시적으로 parent의 constructor을 불러 줘야 하기 땜에
inherited를 불러 주는 것이 좋을 것 같네요.