الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلتي مع dll لم .........................

مغلق
بدأه زكيري عبد العالي في 3 أكتوبر 2001 · 1 رد · 579 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

Violation d'accés a l'adresse 00D0E05C dans le module 'DLLFILE.DLL'

lecture de l'adresse FFFFFFFF.

هذه رسالة الخطأ التي ضهرت عند تنفيذ مثال يلخص مشكلتي مع dll :

اريد الكتابة على اي عنصر على form بواسطة dll

*******************************************************************************************************************

library DllFile;

uses

Unit1,SysUtils,Windows,Messages,Forms,Classes;{$R *.RES}

function Mes :boolean;

begin

Unit1.Form1.Edit1.text:='السلام';

end;

exports

Mes;

begin

end.

*******************************************************************************************************************

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

ExtCtrls, StdCtrls;

type

TMes = function :boolean;

TForm1 = class(TForm)

Button1: TButton;

Edit1: TEdit;

procedure Button1Click(Sender: TObject);

private{ Private declarations } public { Public declarations }end;

var

Form1: TForm1;

implementation{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

var

DLLHandle: THandle;

Mes: TMes;

begin

try

DLLHandle := loadLibrary ('DllFile.dll');

if DLLHandle 0 then begin

@Mes := getProcAddress ( DLLHandle, 'Mes' );

if addr ( Mes) nil then begin

Mes;

end else

showMessage ( 'الملف المحدد غير متوافق' );

end else

showMessage ( 'الملف المحدد غير صحيح' );

finally

freeLibrary ( DLLHandle );

end;

end;

end.

اتبعت طريقة الاخ sum

انتظر الرد

#2

بسم الله الرحمن الرحيم

اخي العزيز Pati

ان اسلوب الذي اتبعته في هذه العمليه خاطىء

لأنه البرنامج سوف يعارض اي عمليه خارجيه تتحكم به

كما في اسلوبك السابق على العموم يوجد هناك حل سهل ويسير جداً

وهو كما ياتي :

ملف DLLFile :

[Code2]

library DllFile;

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

ExtCtrls, StdCtrls;

{$R *.RES}

procedure Mes(Edit:Tedit);

begin

Edit.Text:='السلام عليكم';

end;

exports

Mes;

begin

end.

[/Code2]

هذا بالنسبة للبرنامج :

[Code2]

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

ExtCtrls, StdCtrls;

type

TMes = Procedure (Edit:TEdit);

TForm1 = class(TForm)

Button1: TButton;

Panel1: TPanel;

OpenDialog1: TOpenDialog;

Edit1: TEdit;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

var

DLLHandle: THandle;

Mes: TMes;

begin

if OpenDialog1.Execute then begin

try

DLLHandle := loadLibrary (Pchar(OpenDialog1.FileName));

if DLLHandle <> 0 then begin

@Mes := getProcAddress ( DLLHandle, 'Mes' );

if addr ( Mes) <> nil then begin

Mes(Edit1);

end else

showMessage ( 'الملف المحدد غير متوافق' );

end else

showMessage ( 'الملف المحدد غير صحيح' );

finally

freeLibrary ( DLLHandle );

end;

end;

end;

end.

[/Code2]

ارجوا ان تكون قد اتضحت لك الفكره

وتقبل اطيب تحياتي اخوك SUM

هذا الموضوع مغلق.

مواضيع مشابهة