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

سلسلة بوليسية شيقة حول DLL, لا تتردد بالدخول

مغلق
بدأه Wael Dalloul في 10 نوفمبر 2006 · 41 رد · 13,243 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#26

للرفع مرة أخرى .. نحن بالانتظار ..

#27

السلام عليكم ورحمة الله وبركاته

أخي وائل أولا أشكرك على هذا الموضوع الرائع والشرح الفريد

كما أوصيك أن لا تفشل إذا لم تجد ردود كثيرة، فذلك لا يعني أننا لا نتابع الدرس بل إننا نتابع دروسك بكل اهتمام و إذا تكلم الأستاذ فليسكت الطلبة حتى ينهي الأستاذ كلامه

عندي سؤال لا أدري إذا كان هذا وقته أم هو سبق للأحداث: :huh:

إذا افترضنا أن برنامجي الأصلي استدعى ملف dll لإنجاز مهمة معينة في وقت معين، وأن استمرار عمل البرنامج متوقف على النتيجة التي يقدمها ملف الdll، أي أن مخرجات ال dll سوف تصبح مدخلات لإكمال عمل البرنامج...

السؤال هنا : كيف يمكن أن أعرف أن ال dll قد أتم عمله أم لا؟ وأريد أن أتعمق أكثر فأعرف النسبة المئوية من المهمة المنجزة :wacko: لكي أعرضها مثلا في مكون gauge أو progressbar مثلا...

أشكرك مقدما ... لا تنسونا من الدعاء في هذه العشر الأوائل من ذي الحجة وخاصة يوم عرفة

والسلام عليكم ورحمة الله وبركاته

بسم الله الرحمن الرحيم " وقل رب زدني علما"

#28

اولاً: انا اسف في عدم اللالتزام في الموعد المحدد :( وذلك بسبب الضغط الذي اعانيه من مشاريع الجامعة و العمل, ارجوا ان تعذروني و تدعوا لي

اقتباس
إذا تكلم الأستاذ فليسكت الطلبة حتى ينهي الأستاذ كلامه

افضل اخوتي الكريم انا لا تنادوني استاذ, فانا مثلي مثلكم حتى قد اكون ادنى منكم, كلمة اخي جميلة جدا ارجوا استخدامها من قبل الجميع

اقتباس
عندي سؤال لا أدري إذا كان هذا وقته أم هو سبق للأحداث

سؤال جميل في الحقيقة :)

اقتباس
كيف يمكن أن أعرف أن ال dll قد أتم عمله أم لا؟

يكون ذلك بارجاع قيمة من التابع الذي استخدمته اما true اي انه اتم العمل بنجاح او false اي انّ العمل لم يتم بنجاح

طبعا سوف يتوقف التنفيذ الى حين انتهاء تنفيذ التابع, إلا اذا وضعت ذلك في Thread مختلف

اقتباس
وأريد أن أتعمق أكثر فأعرف النسبة المئوية من المهمة المنجزة

هنا يجب عليك ارسال رسالة الى البرنامج المضيف في كل مدة, و تقوم بالتقاط هذه الرسالة في التطبيق , و من ثم تستطيع ان تفعل ما تريد مثلا ان تجعل ال progressBar يتقدم,

سوف اوضح الامر اكثر:

عليك بتعريف رسالة في مشروع التطبيق و في مشروع ال DLL وذلك على الشكل التالي مثلاً

const
  WM_ONWalk = WM_USER + 1135;

الان لارسال رسالة الى التطبيق من ملف ال DLL يمكنك استخدام sendMessage و يمكنك ان ترسل عدد int باستخدام Param لهذا التابع و الذي سوف نستفيد منه في التطبيق المضيف في تحريك ال progressBar.

الان في التطبيق المضيف نحتاج الى التقاط هذه الرسالة و تحريك ال progressBar حسب القيمة المرسلة في Parameters لعمل ذلك علينا وضع اجرائية تلتقط هذه الرسالة و تقوم في التنفيذ

مثلاً:

	procedure procOnWalk(var Mess:TMessage); message WM_ONWalk;

و في جسم الاجرائية تأخذ القيمة من المتحول mess.wparam او mess.lparam حسب استخدامك للبارمترات في التابع sendmessage

و تقوم بتحريك ال progressBar.

امل ان يكون الامر واضح, اذا لم يكن سوف احاول وضع مثال :)

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#29

السلام عليكم ورحمة الله وبركاته

أشكرك أخي وائل على الإجابة السريعة ...

سوف أجرّب الطريقة وإذا لم أفهمها سوف أسأل مرة أخرى

لكن إذا وضعت مثال يكون أحسن (طبعا إذا توفر لديك الوقت ....)

وفقكم الله ... والسلام عليكم

بسم الله الرحمن الرحيم " وقل رب زدني علما"

#30

السلام عليكم ورحمة الله وبركاته

أين أنت يا أخ وائل؟ عسى أن تكون بخير، وأتمنى لك عودة سريعة إلى موضوعك الذي بدأته...والذي صراحة استفدت منه الكثير ولا زلت بحاجة ماسة إلى المزيد لأتعلمه منك ومن أعضاء المنتدى المتميزين...

بمناسبة الإجابة التي قدمتها لي في المرة السابقة، وجدت مثالا في الكتاب الإلكتروني delphi codes (الذي أظن أنني حملته من هذا المنتدى)، وأردت أن أورده هنا لتعم الفائدة إن شاء الله...

send a windows message with SendMessage

Author: Simon Grossenbacher 
Homepage: http://www.swissdelphicenter.ch 

Category: System


{
  This is useful if you want to send a message from your DLL back
  to the calling application.
}

const
  MY_MESSAGE = WM_USER + 4242;

type
  TForm1 = class(TForm)
	Button1: TButton;
	procedure Button1Click(Sender: TObject);
	// Handler that receive the Message
	procedure MessageReceiver(var msg: TMessage); message MY_MESSAGE;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
  txt: string;
begin
  txt := 'Hello World';
  SendMessage(Form1.Handle, MY_MESSAGE, 0, DWORD(PChar(txt)));
end;

// To receive this custom Message that is addressed to form1.handle
// you need a message handler.

procedure TForm1.MessageReceiver(var msg: TMessage);
var
  txt: PChar;
begin
  txt := PChar(msg.lParam);
  msg.Result := 1;
  ShowMessage(txt);
end;


end.

طبعا جربت هذا الكود ونجح معي، لكن عندي سؤال فيما يخص قيمة الثابت my_message الذي أسميته أنت WM_ONWalk ، ما هو مجال القيم التي يقبلها، ولماذا استعملنا هنا wm_user بالتحديد؟

وفقكم الله، وعيد مبارك وكل عام والأمة الإسلامية بخير :rolleyes: :D :lol:

بسم الله الرحمن الرحيم " وقل رب زدني علما"

#31
اقتباس

The WM_USER constant is used to distinguish between message values that are reserved for use by Windows and values that can be used by an application to send messages within a private window class.

اقتباس

There are five ranges of message numbers:

0 through WM_USER-1 Messages reserved for use by Windows.

WM_USER through 0x7FFF Integer messages for use by private window classes.

0x8000 through 0xBFFF Messages reserved for future use by Windows.

0xC000 through 0xFFFF String messages for use by applications.

Greater than 0xFFFF Reserved by Windows for future use.

تم تعديل هذه المشاركة بواسطة FH في 27 ديسمبر 2006 في 21:15

#32

السلام عليكم ورحمة الله وبركاته

أشكرك أخي FH على الإجابة

وأرجو من وائل وبقية الأعضاء التفاعل أكثر مع هذا الموضوع لأنه مازال في بدايته والحقيقة له أهمية كبيرة لأي مبرمج دلفي...

شكرا لكم

بسم الله الرحمن الرحيم " وقل رب زدني علما"

#33
اقتباس
وأرجو من وائل وبقية الأعضاء التفاعل أكثر مع هذا الموضوع لأنه مازال في بدايته والحقيقة له أهمية كبيرة لأي مبرمج دلفي...

الموضوع مازال في بدايته و لم و لن ينتهي هكذا باذن الله, انتظر ان تجمع لدي بعض الوقت لكي اواصل الكتابة فيه, و قد ذكرت سابقا سبب عدم متابعتي للموضوع

اقتباس
لكن إذا وضعت مثال يكون أحسن (طبعا إذا توفر لديك الوقت ....)

كنت سابقا قد قمت بعمل مثال شبيه بما تريده, فكرة المثال هي: امكانية وضع قيمة متغيرة في Lable باستخدام timer موجود في ملف DLL

في المثال المرفق سوف تلاحظ وجود زرين الاول هو starttimer و الثاني هو stoptimer

الاول يقوم ببدأ timer الموجود في ملف ال DLL و الثاني يقوم بايقافه و تم استخدام نفس الطريقة التي تحدثنا عنها سابقا لنقل القيمة

ليس لدي وقت كافي لشرح المثال بشكل كامل انا اسف, القي نظرة على المثال, و سوف نكمل الحديث لاحقا عند توفر الوقت :)

How_to_move_values_between_DLL_and_App.rar

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#34

ماذا عن ال File mapping لم ارى احدا تناول الموضوع هنا ...

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#35
اقتباس
اذا عن ال File mapping لم ارى احدا تناول الموضوع هنا ...

السلسلة ما تزال في الجزء الاول منها و لم تكتمل بعد, ال File mapping كنت أنوي التطرق لها و لكن في الاجزاء القادمة

إن شاء الله سوف أكمل بعد التخرج من الجامعة,

على فكرة هناك الكثير من الامور لم يتم التطرق لها بعد:D

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#36

قصدك الموضوع الذي تحدثما عنه في الصيف ؟ :wacko:

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#37

هل تقصد موضوع ال Hook؟,أقصد أنه هناك الكثير من الامور المتعلقة بمفهوم ال DLL و يمكن التكلم عنها في مضماره.

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#38

مرحباًَ إخواني

لدي استفسار

في ملفات الADO ملف اسمه msjro.dll يحتوي على class module( هكذا تسمى في الفيجوال بيسك و هي كائن له خصائصه و أحداثه)

باسم jetenginge له وظيفتان إحداهما ضغط قاعدة البيانات

هذه الوظيفة اسمها compactdatabase و تأخذ بارمتران الأول SourceConnection:widestring

الثاني DestConnection;WideString

و النتيجة ترد على شكل HRESULT

لقد فشلت باستدعائه بكل الأشكال الموجودة فما الحل؟

تم تعديل هذه المشاركة بواسطة 007GB في 1 فبراير 2008 في 10:56

المستبد يتحكم في شؤون الناس بإرادته لا بإرادتهم و يحكمهم بهواه لا بشريعتهم و يعلم من نفسه أنه الغاصب المتعدي فيضع كعب رجله على أفواه الملايين من الناس يسدها عن النطق بالحق و التداعي لمطالبته

#39

aشكرا جزبلا علي هذه المعلومات القيمة

يقول ابن عطاء الله اياك و الهم بعد التدبير فما قام به الله عز وجل عنك لا تقدر ان تقوم انت به لنفسك

#40
007GB كتب:
في ملفات الADO ملف اسمه msjro.dll...

فشلت باستدعائه بكل الأشكال الموجودة فما الحل؟

ارفق الملف + محاولتك في موضوع جديد حتى يمكن مساعدتك وياخذ الموضوع حقة

d4baa0.gif
#41
اقتباس
في ملفات الADO ملف اسمه msjro.dll يحتوي على class module( هكذا تسمى في الفيجوال بيسك و هي كائن له خصائصه و أحداثه)

باسم jetenginge له وظيفتان إحداهما ضغط قاعدة البيانات

هذه الوظيفة اسمها compactdatabase و تأخذ بارمتران الأول SourceConnection:widestring

الثاني DestConnection;WideString

و النتيجة ترد على شكل HRESULT

لقد فشلت باستدعائه بكل الأشكال الموجودة فما الحل؟

هذا له علاقة بالـ OLE

راجع الكود هنا http://www.delphifaq.com/faq/delphi/database/f7.shtml

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#42

مشكور إخواني

جاري التجريب

المستبد يتحكم في شؤون الناس بإرادته لا بإرادتهم و يحكمهم بهواه لا بشريعتهم و يعلم من نفسه أنه الغاصب المتعدي فيضع كعب رجله على أفواه الملايين من الناس يسدها عن النطق بالحق و التداعي لمطالبته

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…