للرفع مرة أخرى .. نحن بالانتظار ..
سلسلة بوليسية شيقة حول DLL, لا تتردد بالدخول
السلام عليكم ورحمة الله وبركاته
أخي وائل أولا أشكرك على هذا الموضوع الرائع والشرح الفريد
كما أوصيك أن لا تفشل إذا لم تجد ردود كثيرة، فذلك لا يعني أننا لا نتابع الدرس بل إننا نتابع دروسك بكل اهتمام و إذا تكلم الأستاذ فليسكت الطلبة حتى ينهي الأستاذ كلامه
عندي سؤال لا أدري إذا كان هذا وقته أم هو سبق للأحداث: :huh:
إذا افترضنا أن برنامجي الأصلي استدعى ملف dll لإنجاز مهمة معينة في وقت معين، وأن استمرار عمل البرنامج متوقف على النتيجة التي يقدمها ملف الdll، أي أن مخرجات ال dll سوف تصبح مدخلات لإكمال عمل البرنامج...
السؤال هنا : كيف يمكن أن أعرف أن ال dll قد أتم عمله أم لا؟ وأريد أن أتعمق أكثر فأعرف النسبة المئوية من المهمة المنجزة :wacko: لكي أعرضها مثلا في مكون gauge أو progressbar مثلا...
أشكرك مقدما ... لا تنسونا من الدعاء في هذه العشر الأوائل من ذي الحجة وخاصة يوم عرفة
والسلام عليكم ورحمة الله وبركاته
بسم الله الرحمن الرحيم " وقل رب زدني علما"
اولاً: انا اسف في عدم اللالتزام في الموعد المحدد :( وذلك بسبب الضغط الذي اعانيه من مشاريع الجامعة و العمل, ارجوا ان تعذروني و تدعوا لي
اقتباسإذا تكلم الأستاذ فليسكت الطلبة حتى ينهي الأستاذ كلامه
افضل اخوتي الكريم انا لا تنادوني استاذ, فانا مثلي مثلكم حتى قد اكون ادنى منكم, كلمة اخي جميلة جدا ارجوا استخدامها من قبل الجميع
اقتباسعندي سؤال لا أدري إذا كان هذا وقته أم هو سبق للأحداث
سؤال جميل في الحقيقة :)
اقتباسكيف يمكن أن أعرف أن ال 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.
امل ان يكون الامر واضح, اذا لم يكن سوف احاول وضع مثال :)
رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.
لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"
السلام عليكم ورحمة الله وبركاته
أشكرك أخي وائل على الإجابة السريعة ...
سوف أجرّب الطريقة وإذا لم أفهمها سوف أسأل مرة أخرى
لكن إذا وضعت مثال يكون أحسن (طبعا إذا توفر لديك الوقت ....)
وفقكم الله ... والسلام عليكم
بسم الله الرحمن الرحيم " وقل رب زدني علما"
السلام عليكم ورحمة الله وبركاته
أين أنت يا أخ وائل؟ عسى أن تكون بخير، وأتمنى لك عودة سريعة إلى موضوعك الذي بدأته...والذي صراحة استفدت منه الكثير ولا زلت بحاجة ماسة إلى المزيد لأتعلمه منك ومن أعضاء المنتدى المتميزين...
بمناسبة الإجابة التي قدمتها لي في المرة السابقة، وجدت مثالا في الكتاب الإلكتروني 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:
بسم الله الرحمن الرحيم " وقل رب زدني علما"
اقتباس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
السلام عليكم ورحمة الله وبركاته
أشكرك أخي FH على الإجابة
وأرجو من وائل وبقية الأعضاء التفاعل أكثر مع هذا الموضوع لأنه مازال في بدايته والحقيقة له أهمية كبيرة لأي مبرمج دلفي...
شكرا لكم
بسم الله الرحمن الرحيم " وقل رب زدني علما"
اقتباسوأرجو من وائل وبقية الأعضاء التفاعل أكثر مع هذا الموضوع لأنه مازال في بدايته والحقيقة له أهمية كبيرة لأي مبرمج دلفي...
الموضوع مازال في بدايته و لم و لن ينتهي هكذا باذن الله, انتظر ان تجمع لدي بعض الوقت لكي اواصل الكتابة فيه, و قد ذكرت سابقا سبب عدم متابعتي للموضوع
اقتباسلكن إذا وضعت مثال يكون أحسن (طبعا إذا توفر لديك الوقت ....)
كنت سابقا قد قمت بعمل مثال شبيه بما تريده, فكرة المثال هي: امكانية وضع قيمة متغيرة في Lable باستخدام timer موجود في ملف DLL
في المثال المرفق سوف تلاحظ وجود زرين الاول هو starttimer و الثاني هو stoptimer
الاول يقوم ببدأ timer الموجود في ملف ال DLL و الثاني يقوم بايقافه و تم استخدام نفس الطريقة التي تحدثنا عنها سابقا لنقل القيمة
ليس لدي وقت كافي لشرح المثال بشكل كامل انا اسف, القي نظرة على المثال, و سوف نكمل الحديث لاحقا عند توفر الوقت :)
رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.
لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"
ماذا عن ال File mapping لم ارى احدا تناول الموضوع هنا ...
أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر
وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري
كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو
أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري
عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري
فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري
اقتباساذا عن ال File mapping لم ارى احدا تناول الموضوع هنا ...
السلسلة ما تزال في الجزء الاول منها و لم تكتمل بعد, ال File mapping كنت أنوي التطرق لها و لكن في الاجزاء القادمة
إن شاء الله سوف أكمل بعد التخرج من الجامعة,
على فكرة هناك الكثير من الامور لم يتم التطرق لها بعد:D
رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.
لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"
قصدك الموضوع الذي تحدثما عنه في الصيف ؟ :wacko:
أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر
وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري
كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو
أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري
عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري
فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري
هل تقصد موضوع ال Hook؟,أقصد أنه هناك الكثير من الامور المتعلقة بمفهوم ال DLL و يمكن التكلم عنها في مضماره.
رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.
لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"
مرحباًَ إخواني
لدي استفسار
في ملفات الADO ملف اسمه msjro.dll يحتوي على class module( هكذا تسمى في الفيجوال بيسك و هي كائن له خصائصه و أحداثه)
باسم jetenginge له وظيفتان إحداهما ضغط قاعدة البيانات
هذه الوظيفة اسمها compactdatabase و تأخذ بارمتران الأول SourceConnection:widestring
الثاني DestConnection;WideString
و النتيجة ترد على شكل HRESULT
لقد فشلت باستدعائه بكل الأشكال الموجودة فما الحل؟
تم تعديل هذه المشاركة بواسطة 007GB في 1 فبراير 2008 في 10:56
المستبد يتحكم في شؤون الناس بإرادته لا بإرادتهم و يحكمهم بهواه لا بشريعتهم و يعلم من نفسه أنه الغاصب المتعدي فيضع كعب رجله على أفواه الملايين من الناس يسدها عن النطق بالحق و التداعي لمطالبته
aشكرا جزبلا علي هذه المعلومات القيمة
يقول ابن عطاء الله اياك و الهم بعد التدبير فما قام به الله عز وجل عنك لا تقدر ان تقوم انت به لنفسك
007GB كتب:في ملفات الADO ملف اسمه msjro.dll...فشلت باستدعائه بكل الأشكال الموجودة فما الحل؟
ارفق الملف + محاولتك في موضوع جديد حتى يمكن مساعدتك وياخذ الموضوع حقة
اقتباسفي ملفات ال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
===
اقتباسعبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــمو تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم
ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم
أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟
ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا
البردوني "نحن و الحاكمون "
مشكور إخواني
جاري التجريب
المستبد يتحكم في شؤون الناس بإرادته لا بإرادتهم و يحكمهم بهواه لا بشريعتهم و يعلم من نفسه أنه الغاصب المتعدي فيضع كعب رجله على أفواه الملايين من الناس يسدها عن النطق بالحق و التداعي لمطالبته
هذا الموضوع مغلق.
