ورود

View Full Version : خطای Access violation at address 74E35B3E in module 'RICHED20.dll'. Read of address 83EC8B55



seyed_farid
چهارشنبه 24 اسفند 1390, 13:01 عصر
با سلام خدمت دوستان
من تو برنامم از 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); استفاده میکنم ولی برنامم خطای عنوان شده را میده و کلا هنگ میشه:کف:
دوستان کسی میتونه راهنمائیم کنه؟:تشویق:

Mask
چهارشنبه 24 اسفند 1390, 13:21 عصر
من هر چی کدتو خوندم سر در نیاوردم.
اگه ممکنه کدتو به صورت کامل بزار.
در ضمن حواست باشه با اشیا(ممو) به صورت مستقیم در ترد ارتباط برقرار نکن.

SayeyeZohor
چهارشنبه 24 اسفند 1390, 14:09 عصر
اول بايد Thread ت رو Create كني
TReadingThread.Create(False);
بعد دستورت رو بنويسي
خب بايدم Access Voliation بده
البته دستورت هم واضح نيست

seyed_farid
پنج شنبه 25 اسفند 1390, 11:51 صبح
با عرض پوزش
اينها رو هم نوشته بودم اما خطا ميده.:متعجب:

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;

seyed_farid
یک شنبه 16 اردیبهشت 1397, 22:19 عصر
من هر چی کدتو خوندم سر در نیاوردم.
اگه ممکنه کدتو به صورت کامل بزار.
در ضمن حواست باشه با اشیا(ممو) به صورت مستقیم در ترد ارتباط برقرار نکن.
با عرض سلام
ببخشید منظورتون چیه؟
پس به چه صورتی باید تکست دریافتی از شبکه رو ببرم تو ممو و ثبتش کنم؟

Mask
دوشنبه 17 اردیبهشت 1397, 21:05 عصر
مهندس کدتون ایراد اساسی داره باید اصلاح بشه.
هدفتون رو بگین. تا بشه کدی براش نوشت.

seyed_farid
جمعه 21 اردیبهشت 1397, 22:55 عصر
یه جاهایی خوندم که این خطا مربوط به باگ ریچ ادیت در ویندوز XP هست و باید DLL رو عوض کرد.

seyed_farid
جمعه 21 اردیبهشت 1397, 23:00 عصر
الان این بخش از گیرنده رو در نظر بگیرید.

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;

در بخشی که با ممو میخوام کار کنم. ایرادی داره؟

Mahmood_M
جمعه 21 اردیبهشت 1397, 23:58 عصر
زمان استفاده از Thread ها باید چند مورد رو رعایت کنید، یکی از موارد مهم اینه که از درون متد Execute با اشیای Visual ارتباط مستقیم برقرار نکنید
برای نوشتن بر داخل Memo یا می تونید از Message ها استفاده کنید یا اینکه یک متد در کلاس Thread تعریف کنید برای نوشتن در Memo و اون رو با دستور Synchronize فراخوانی کنید
برای هر دو مورد قبلا در سایت توضیحات و نمونه قرار داده شده، کمی جستجو کنید به نتیجه میرسید
نحوه کار با کامپوننتهای Indy هم در کدی که قرار دادید درست نیست
در رویداد Connected چرا باید Thread رو Create کنید ؟
مهم ترین اصل در کار با Thread ها اینه که تداخل بین تردها رو از بین ببرید، در کد شما TCPClient در Thread اصلی ساخته میشه، در یک Thread جداگانه استفاده میشه و همزمان برای رویدادهای اون هم کد نوشته شده که این کد ها در Thread اصلی اجرا میشن
کمی در مورد Thread ها تحقیق کنید و نمونه های موجود رو ببینید، کدی که نوشتید شما رو به نتیجه نمیرسونه