خطای Access violation at address 74E35B3E in module 'RICHED20.dll'. Read of address 83EC8B55
با سلام خدمت دوستان
من تو برنامم از IdTCPClient1 استفاده کرده ام و برای اینکه بتونم با اون سند و رسیو داشته باشم از دستور زیر استقاده کردم
type
TReadingThread = class(TThread)
protected
FConn: TIdTCPConnection;
procedure Execute; override;
public
constructor Create(ACon: TIdTCPConnection); reintroduce;
end;
.
.
.
var
Form1: TForm1;
ReadingThread : TReadingThread;
implementation
{$R *.dfm}
constructor TReadingThread.Create(ACon: TIdTCPConnection);
begin
FConn := ACon;
inherited Create(False);
end;
procedure TReadingThread.Execute;
var s : string;
begin
while not Terminated do
begin
//FConn.ReadFromStack(True, 1000, False);
//if FConn.InputBuffer.Size > 0 then
//begin
s := FConn.CurrentReadBuffer;
if Length(S) > 0 then
Form1.Memo1.Lines.Add(s);
//end;
end;
end;
حالا برای ارسال پیام هم از دستور IdTCPClient.Write(Text); استفاده میکنم ولی برنامم خطای عنوان شده را میده و کلا هنگ میشه:کف:
دوستان کسی میتونه راهنمائیم کنه؟:تشویق:
نقل قول: خطای Access violation at address 74E35B3E in module 'RICHED20.dll'. Read of address 83EC8B5
من هر چی کدتو خوندم سر در نیاوردم.
اگه ممکنه کدتو به صورت کامل بزار.
در ضمن حواست باشه با اشیا(ممو) به صورت مستقیم در ترد ارتباط برقرار نکن.
نقل قول: خطای Access violation at address 74E35B3E in module 'RICHED20.dll'. Read of address 83EC8B5
اول بايد Thread ت رو Create كني
TReadingThread.Create(False);
بعد دستورت رو بنويسي
خب بايدم Access Voliation بده
البته دستورت هم واضح نيست
نقل قول: خطای Access violation at address 74E35B3E in module 'RICHED20.dll'. Read of address 83EC8B5
با عرض پوزش
اينها رو هم نوشته بودم اما خطا ميده.:متعجب:
procedure TSettings.IdTCPClient1Connected(Sender: TObject);
begin
try
if ReadingThread <> nil then
begin
ReadingThread.WaitFor;
FreeAndNil(ReadingThread);
end;
except end;
try
ReadingThread := TReadingThread.Create(IdTCPClient1);
except
IdTCPClient1.DisconnectSocket;
//raise;
end;
end;
procedure TSettings.IdTCPClient1Disconnected(Sender: TObject);
begin
if ReadingThread <> nil then
begin
ReadingThread.WaitFor;
FreeAndNil(ReadingThread);
end;
end;
نقل قول: خطای Access violation at address 74E35B3E in module 'RICHED20.dll'. Read of address 83EC8B5
نقل قول:
نوشته شده توسط
Mask
من هر چی کدتو خوندم سر در نیاوردم.
اگه ممکنه کدتو به صورت کامل بزار.
در ضمن حواست باشه با اشیا(ممو) به صورت مستقیم در ترد ارتباط برقرار نکن.
با عرض سلام
ببخشید منظورتون چیه؟
پس به چه صورتی باید تکست دریافتی از شبکه رو ببرم تو ممو و ثبتش کنم؟
نقل قول: خطای Access violation at address 74E35B3E in module 'RICHED20.dll'. Read of address 83EC8B5
مهندس کدتون ایراد اساسی داره باید اصلاح بشه.
هدفتون رو بگین. تا بشه کدی براش نوشت.
نقل قول: خطای Access violation at address 74E35B3E in module 'RICHED20.dll'. Read of address 83EC8B5
یه جاهایی خوندم که این خطا مربوط به باگ ریچ ادیت در ویندوز XP هست و باید DLL رو عوض کرد.
نقل قول: خطای Access violation at address 74E35B3E in module 'RICHED20.dll'. Read of address 83EC8B5
الان این بخش از گیرنده رو در نظر بگیرید.
procedure TReadingThread.Execute;
var s : string;
begin
while not Terminated do
begin
s := FConn.CurrentReadBuffer;
if Length(S) > 0 then
Form1.Memo1.Lines.Add(s);
//end;
end;
end;
در بخشی که با ممو میخوام کار کنم. ایرادی داره؟
نقل قول: خطای Access violation at address 74E35B3E in module 'RICHED20.dll'. Read of address 83EC8B5
زمان استفاده از Thread ها باید چند مورد رو رعایت کنید، یکی از موارد مهم اینه که از درون متد Execute با اشیای Visual ارتباط مستقیم برقرار نکنید
برای نوشتن بر داخل Memo یا می تونید از Message ها استفاده کنید یا اینکه یک متد در کلاس Thread تعریف کنید برای نوشتن در Memo و اون رو با دستور Synchronize فراخوانی کنید
برای هر دو مورد قبلا در سایت توضیحات و نمونه قرار داده شده، کمی جستجو کنید به نتیجه میرسید
نحوه کار با کامپوننتهای Indy هم در کدی که قرار دادید درست نیست
در رویداد Connected چرا باید Thread رو Create کنید ؟
مهم ترین اصل در کار با Thread ها اینه که تداخل بین تردها رو از بین ببرید، در کد شما TCPClient در Thread اصلی ساخته میشه، در یک Thread جداگانه استفاده میشه و همزمان برای رویدادهای اون هم کد نوشته شده که این کد ها در Thread اصلی اجرا میشن
کمی در مورد Thread ها تحقیق کنید و نمونه های موجود رو ببینید، کدی که نوشتید شما رو به نتیجه نمیرسونه