منزل
Top.Mail.Ru Yandeks.Metrika
المنتدى: "Main";
الأرشيف الحالي: 2002.01.08;
تنزيل: [xml.tar.bz2];

إلى

أتصل مرة أخرى البحث عن فروع مماثلة


Eugene Zelikovsky   (2001-12-14 13:58) [0]

يرجى من الناس شرح كيفية العمل مع CallBack.
التواصل دلل مع البرنامج.
إذا كان ذلك ممكنا قطعة من التعليمات البرمجية.
شكرا لك!



Eugene Zelikovsky   (2001-12-14 14:52) [1]

مساعدة!!!



Digitman   (2001-12-14 14:54) [2]

حسنًا ، لقد قدمت لك بالفعل جزءًا يوضح كيفية توصيل معالج الأحداث بمكون تم إنشاؤه في DLL! كيف تحب معالج الأحداث لا رد الاتصال؟



Eugene Zelikovsky   (2001-12-14 16:09) [3]

لا ، نصيحتك لم تنجح: (... لن يعمل EventHendlr .... ربما كل نفس الشيء عن CallBack وأخبرني ....



Digitman   (2001-12-14 16:14) [4]

وهذا هو CallBack !!!!!!!!!!!!!!!!!!!!!!!
حقيقة أن لديك شيء "لا يتم نقله" في مكان ما هو سوء فهمك لآلية تعيين معالجات الأحداث. وهذا فقط. وأنت على الفور - "لم تنتقل"))))))))))) نعم ، كل شيء رائع تنتقل!)) ابحث عن خطأ في المنزل.



Eugene Zelikovsky   (2001-12-14 16:22) [5]

Upss ....
حسنا ، لقد حصلت عليه ... :) رد الاتصال ... حسنا ... ثم السؤال!
ماذا كتبت بعد ذلك .... عن الجزء الذي فهمته .. نعم ، إنه يعمل بشكل صحيح .... إنه يرسل عنوانًا إلى EventHendler .... OK
ولكن هنا عقبة في البرنامج ... لمزيد من التفاصيل؟ ما كتبته ... لا يتصور EventHendler .... أعترف أنني لم أفهم حتى ما الذي نفعله في البرنامج .....



Digitman   (2001-12-14 16:27) [6]

في أي برنامج؟ كلا DLL و EXE برامج. استخدم ، على سبيل المثال ، مصطلحات مثل "رمز الاتصال" و "رمز الاتصال". خلاف ذلك - ليس من الواضح أن الشيء الذي تتحدث عنه ....



Eugene Zelikovsky   (2001-12-14 16:35) [7]

حسنا :)
ولكن مع رمز الاتصال ، يمكن أن أعيق ... مزيد من التفاصيل؟ ما كتبته ... لا يتصور EventHendler .... أعترف أنني لم أفهم حتى ما الذي نفعله فيه. .....
وهل من الضروري أيضًا سحب Socket ... في رمز الاتصال؟



Digitman   (2001-12-14 16:54) [8]

ماذا يعني "سحب"؟ كم من الوقت سوف نتحدث بغباء في المصطلحات ؟؟؟

يعلمك TSocketServer الذي قمت بإنشائه في DLL في المعلمة Socket الحدث OnClientRead حول أي عميل معين أرسل لك حزمة البيانات.



Digitman   (2001-12-14 16:56) [9]

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



Eugene Zelikovsky   (2001-12-14 17:35) [10]

هنا هو ما كتبته في DLL:
الإجراء ClientRead (الخوادم: TServerSocket ؛ EventHandler: TSocketNotifyEvent) ؛ التصدير ؛ بدأ ServerS.OnClientRead: = EventHandler؛ ينتهي.
في التحدي كود:
نوع TForm1 = فئة (TForm) Memo1: TMemo؛ الإجراء OnClientRead (المرسل: TObject ؛ المقبس: TCustomWinSocket) ؛ الداخلي TForm1.OnClientRead (المرسل: TObject ؛ المقبس: TCustomWinSocket) ؛ بدأ memo1.lines.Insert (0، Socket.ReceiveText)؛ ينتهي.


وماذا كان المقصود آخر:

SetOnClientRead (ServerSocketInstanceCreatedInDll، MyObjectInstance.OnClientRead)؛



petr_v_a   (2001-12-14 18:32) [11]

إذا فهمت بشكل صحيح ما تحتاجه:

في إكس

الداخلي MyCallBackregister (proc: مؤشر) ؛ خارجي "mylib.dll" ؛

وظيفة cbak (معلومات: مؤشر)
بدأ
showmessage ("عفوا!") ؛
الغاية؛

/ * في مكان ما على التمهيد * /
MyCallackRegister (cbak) ؛

في دلل

نوع
TMyCallBackProc = إجراء (معلومات: مؤشر) ؛
فار
CbakAddr: TMyCallBackProc؛
..........

الداخلي MyCallackRegister (addr: TMyCallBackProc) ؛ // ولا تنسَ تصديره
بدأ
CbakAddr: = addr؛
الغاية؛

......................
/ * وهذا هو معالج الحدث * /
الإجراء Datamodule1PosleAtomnoiVoiny (المرسل: TTerrorist) ؛
بدأ
CbackAddr (المرسل) ؛
الغاية؛

!!! كتبت هنا ، ربما حيث لا ينمو الخيط معًا ، لكن الفكرة لا تعاني من ذلك



Eugene Zelikovsky   (2001-12-14 20:01) [12]

> petr_v_a
كل شيء على ما يرام ... كانت فقط woleyshon محاور سئمت من ...

سؤال سيء
ماذا تقصد

وظيفة cbak (معلومات: مؤشر) بدأ showmessage ("عفوا!") ؛ ينتهي.

حيث لم يتم الانتهاء ... ما وظيفة .... لكنها خلل ..
وكيف تخيف هذه الوصول جدا؟
لا اعرف ماذا افكر ...
ينحني البرنامج في لحظة مماثلة لهذا في التعليمات البرمجية الخاصة بك ... CbakAddr: = addr؛



Anatoly Podgoretsky   (2001-12-14 20:19) [13]

نعم ، الوصول إلى voleyshon zadolbali :-)



petr_v_a   (2001-12-14 20:35) [14]

> يوجين زيليكوفسكي
وحذرت :) أنا الفكرة زرعت أن كل شيء في قانون صحيح ، أنا لا أجيب.



y-soft   (2001-12-14 21:34) [15]

> يوجين زيليكوفسكي ©
لا يمكنك استخدام الطريقة كدالات رد اتصال ، ولكن يمكنك تمرير ارتباط منفصل إلى كائن الاتصال وعنوان وظيفة المحول الخطي كمعلمة. من الأفضل استخدام اصطلاح stdcall للعمل مع Dll (سنحقق توافقًا أفضل مع أدوات التطوير الأخرى). على سبيل المثال ، مثل هذا (فقط مقاربة عامة):

نوع
TMyCallback = الإجراء (المرجع: المؤشر) ؛ stdcall ؛ // إجراء محول رد الاتصال

الإجراء تصدير:

الداخلي SomeProc (المرجع: المؤشر ؛ MyCbk: TMyCallback) ؛ STDCALL.

اتصل بها مثل هذا:

الإجراء TMyObject.CallSomeProc؛
بدأ
SomeProc (Self،MyCallback)؛
الغاية؛

الإجراء TMyObject.SomeMethod ؛
بدأ
// بعض العمل
الغاية؛

معالج إجراء رد الاتصال:

الإجراء MyCallback (المرجع: المؤشر) ؛ STDCALL.
بدأ
TMyObject (المرجع) .SomeMethod.
الغاية؛

ربما تريد هذا الخيار أكثر :)



petr_v_a   (2001-12-14 21:49) [16]

> ص لينة
لكن "وظائف رد الاتصال الخاصة بالطريقة ليست مجرد" لا يمكن استخدامها وعدم استخدامها "، وإذا كنت تستخدمها ، فسيكون الملحق مضمونًا



Eugene Zelikovsky   (2001-12-14 23:14) [17]

> petr_v_a
بشكل عام ، قمت بإجراء الطريقة التي اقترحتها العمل .... ولكن مرة واحدة فقط ... ثم لا يهتم ... لا يستجيب ...
> ص لينة
لم افهم طريقتك
ماذا تقصد:
الإجراء MyCallback (المرجع: المؤشر) ؛ STDCALL. بدأ --- TMyObject (المرجع) .SomeMethod. --- // هنا ينتهي.



iZEN   (2001-12-14 23:36) [18]

يوصف العمل مع DLL في أي كتاب لائق أو أكثر على دلفي.
لقد اشتريت كتابًا ، وقراءته ، وفهمه (إنه ضروري!).

ولماذا نتحدث ونزرع الحدائق هنا؟

ملاحظة: لا يعرف الشخص كيفية التعامل مع DLL - دعه يدرس ، ثم يفكر بالفعل فيما إذا كان الأمر يستحق حشو المقابس هناك.



Eugene Zelikovsky   (2001-12-14 23:52) [19]

> IZEN
في كتاب غير لائق ، يوصف العمل مع DLL مثل:
يمكنك وضع هذه الوظيفة نعم التي ستحسب لك 2 + 2 ...
إلخ
والعمل مع رد الاتصال مكتوب بشكل أساسي في قسم COM / DCOM وهذا هو كل شيء .... الذي بدأت للتو في التعلم ...
حسنًا ، ليس عندما لم أستخدم CALLBACK و .... الآن أريد أن أتعلم ....
وليس هناك ما أغضب ... إذا أخبرني ذكي ... إذا لم يكن هناك صمت ...



petr_v_a   (2001-12-15 00:39) [20]

> يوجين زيليكوفسكي ، لماذا تبدو مرة واحدة ، في منطق البرنامج ، إلى جانب أنتم يكذبون من سيكتشفونه ، هذا سؤال آخر على الأقل. العمل بجد ، تصحيح أكثر نفسه، ولا تولي اهتماما لأحد :)



iZEN   (2001-12-15 01:30) [21]

رد الاتصال - ما يسمى "رد الاتصال". تم اختراعه حتى يتمكن أي برنامج من "إراحة" وظيفته (عنوانه) إلى برنامج آخر ، بحيث يمكن أن يطلق عليه الأخير (برنامج آخر) في البرنامج الأول دون إعادة ترجمة و / أو تحليل رمز البرنامج الأول - وهذا أمر غير مهذب.

يتم استخدام عمليات الاسترجاعات في أي برنامج مؤطر مع معالجة الأحداث: على سبيل المثال ، يعد معالجو الأحداث الذين يكتبهم مبرمج مشاركين مباشرين في استدعاءات رد الاتصال من الوظيفة الرئيسية لمعالج أحداث نافذة Windows. هذا كل شيء.

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

حتى في أوائل Pascal ، يتم استخدام النوع الإجرائي لتوفير آلية رد الاتصال (رد اتصال ، أو اتصال متأخر):
نوع TMyProcedure = method (a: Integer؛ b: Char؛ c: String [23])؛ فار MyHandler: TMyProcedure ؛ الإجراء OtherProcedure (a: Integer؛ b: Char؛ c: String [83])؛ بدأ WriteLn (أ) ؛ WriteLn (ب) ؛ WriteLn (ج) ؛ ينتهي. BEGIN ... MyHandler: = OtherProcedure؛ ... MyHandler (10 ، "f" ، "تحية من أسفل قلبي!") ؛ END.

لذلك ، من الأفضل أولاً دراسة العمل مع DLL ، سيكون أكثر منطقية.



iZEN   (2001-12-15 01:34) [22]

أنصحك بعدم توصيل مفاهيم رد الاتصال و COM / DCOM ، وهذا لا يساعد كثيرا في دراسة المشكلة.



iZEN   (2001-12-15 01:37) [23]

> TMyProcedure = method (a: Integer؛ b: Char؛ c: String [23])؛
تصحيح:
نوع
TMyProcedure = method (a: Integer؛ b: Char؛ c: String [83])؛



y-soft   (2001-12-15 10:29) [24]

> يوجين زيليكوفسكي ©

التفسير:

لا يتعين على المكتبة معرفة نوع كائننا على الإطلاق ، وبالتالي ، فإننا ببساطة نمرر مؤشر غير مطبوع عندما يتم استدعاء الإجراء من المكتبة. هناك لغات تكون فيها أنواع المراجع غائبة تمامًا - في هذه الحالة ، من الجدير إلقاء مؤشر على كائننا إلى Integer.

الإجراء TMyObject.CallSomeProc؛ بدأ SomeProc (Self،MyCallback)؛ ينتهي.

في رمز دلل:

الداخلي SomeProc (المرجع: المؤشر ؛ MyCbk: TMyCallback) ؛ STDCALL. بدأ // ... بعض الإجراءات MyCbk (المرجع) ؛ // Call Callback ينتهي.

وفقًا لذلك ، في معالج إجراءات رد الاتصال ، نقوم بإجراء تحويل الكتابة بشكل صريح

الإجراء MyCallback (المرجع: المؤشر) ؛ STDCALL. بدأ TMyObject (المرجع) .SomeMethod. // هنا !!! ينتهي.

في COM / DCOM ، بالمناسبة ، يتم استخدام آليات مختلفة تماما لأغراض مماثلة.



Eugene Zelikovsky   (2001-12-15 13:00) [25]

شكرا للجميع.
> petr_v_a
لقد تحولت مقاربتك إلى أكثر الطرق .... مع تصحيحات صغيرة لبرنامجي ...
> iZEN
وشكرا للمساعدة ... ورحلة في التاريخ!



صفحات: 1 فرع كامل

المنتدى: "Main";
الأرشيف الحالي: 2002.01.08;
تنزيل: [xml.tar.bz2];

الطابق العلوي









الذاكرة: 0.65 ميغابايت
الوقت: 0.045 ج
14-22361
نيكولاي
2001-11-08 00:17
2002.01.08
نعم ...............................


3-21915
KAA
2001-12-04 10:28
2002.01.08
إعادة تعيين متغير MSSQL2000


4-22503
يارا
2001-11-05 20:11
2002.01.08
إدخال سلسلة في نافذة


1-22148
Delphimun
2001-12-20 12:10
2002.01.08
كيف ترسل رسالة إلى النظام تفيد بأن المفتاح مضغوط؟


14-22390
قطع الطاقم
2001-11-08 12:54
2002.01.08
اسمع ميرلين ، هل تنام؟ يعني هل أنت مرتاح؟





الأفريكانية الألبانية عربي الأرميني أذربيجان الباسكي البيلاروسية Bulgarian التشيكية الصينية المبسطة) تقاليد صينية) الكرواتية التشيكية دانماركي Dutch أنجليزي الإستونية الفلبينية Finnish جيب
الجاليكية الجورجية الألمانيّة اليونانيّة الكريولية الهايتية اللغة العبرية الهندية الهنغارية أيسلندي Indonesian الأيرلندية Italian اليابانيّة الكوريّة اللاتفية اللتوانية المقدونية الملايو المالطية Norwegian
اللغة الفارسية بولنديّة البرتغاليّة رومانية Russian صربي السلوفاكيّة سلوفيني إسباني السواحيلي Swedish Thai التركية الأوكراني الأردية الفيتنامية ويلزي اليديشية البنغالي البوسنية
السيبيونو الاسبرانتو الغوجاراتية الهوسا همونغ الإيبو جاوي الكانادا الخمير لاو لاتينية الماوري المهاراتية المنغولية النيبالية البنجابية الصومالية التاميل التيلجو اليوروبا
زولو
Английский Французский ألماني Итальянский البرتغالية Русский Испанский