घर
Top.Mail.Ru Yandeks.Metrika
मंच: "मुख्य";
वर्तमान संग्रह: 2002.01.08;
डाउनलोड करें: [xml.tar.bz2];

नीचे

कॉलबैक इसी तरह की शाखाएँ खोजें


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

लोग कृपया बताएं कि कॉलबैक के साथ कैसे काम किया जाए।
कार्यक्रम के साथ संचार डी.एल.ई.
यदि संभव हो तो कोड का एक टुकड़ा।
धन्यवाद!



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]

और यह कॉलबैक है !!!!!!!!!!!!!!!!!!!!!!!!
तथ्य यह है कि आपके पास कुछ "प्रेषित नहीं किया जा रहा है" कहीं न कहीं घटना संचालकों को असाइन करने के लिए तंत्र की गलतफहमी है। और बस। और आप तुरंत - "प्रेषित नहीं")))))))))) हाँ, सब कुछ अद्भुत संचारित है!)) घर पर एक गलती के लिए देखो।



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

Upss…।
ठीक है, मैं समझ गया ... :) कॉलबैक ... ठीक है ... फिर सवाल!
फिर आपने क्या लिखा .... dll भाग के बारे में मैं समझ गया .. हाँ यह सही ढंग से काम करता है .... यह EventHendler को एक पता भेजता है ... ठीक है
लेकिन यहाँ कार्यक्रम के साथ एक अड़चन है ... अधिक जानकारी के लिए? आपने जो लिखा है ... EventHendler का अनुभव नहीं करता है .... मैं स्वीकार करता हूं कि मुझे यह भी समझ नहीं आया कि हम कार्यक्रम में क्या कर रहे हैं .....



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

जो कार्यक्रम में? DLL और EXE दोनों प्रोग्राम हैं। उदाहरण के लिए, "कॉलिंग कोड" और "कोड कहा जाता है" जैसे शब्दों का उपयोग करें। अन्यथा - नहीं एक लानत बात स्पष्ट है कि आप किस बारे में बात कर रहे हैं ...।



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

ठीक है :)
लेकिन कॉलिंग कोड के साथ, एक अड़चन ... क्या मैं आपको अधिक विवरण दे सकता हूं? आपने जो लिखा है ... वह EventHendler नहीं समझता है .... मैं मानता हूं कि मुझे यह भी समझ नहीं आया कि हम इसमें क्या कर रहे हैं। .....
और क्या कॉलिंग कोड में सॉकेट को खींचना अनिवार्य है?



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

"खींचने" का क्या मतलब है? हम कब तक शब्दजाल में मूर्खतापूर्ण बात करने जा रहे हैं ????

TSLServer जो आपने DLL में बनाया था, आपको OnClientRead ईवेंट के सॉकेट पैरामीटर में सूचित करता है कि किस विशेष क्लाइंट ने आपको डेटा पैकेट भेजा है।



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

अपना कथित रूप से टूटा हुआ कोड टुकड़ा लाओ - मैं उस पर टिप्पणी करूँगा जहाँ आप विशेष रूप से कर रहे हैं। खैर, आप उंगलियों पर कैसे समझाते हैं?



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

यहाँ मैं DLL में लिखा है:
प्रक्रिया क्लाइंटराइड (सर्वर: TServerSocket; EventHandler: TSocketNotifyEvent); निर्यात; शुरू करना ServerS.OnClientRead: = EventHandler; अंत;
चुनौती में कोड:
टाइप TForm1 = वर्ग (TForm) मेमोक्नुमएक्स: टीएममो; प्रक्रिया OnClientRead (प्रेषक: Tobject; सॉकेट: TCustomWinSocket); प्रक्रिया TForm1.OnClientRead (प्रेषक: Tobject; सॉकेट: TCustomWinSocket); शुरू करना memo1.lines.Insert (1, Socket.ReceiveText); अंत;


और क्या मतलब था:

SetOnClientRead (ServerSocketInstanceCreatedInDll, MyObjectInstance.OnClientRead);



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

अगर मुझे सही ढंग से समझ में आ जाए कि आपको क्या चाहिए:

निर्वासन में

प्रक्रिया MyCallBackregister (proc: पॉइंटर); बाहरी "mylib.dll";

फंक्शन cbak (जानकारी: पॉइंटर)
शुरू करना
दिखावा ("उफ़!");
अंत;

/ * कहीं बूट पर * /
MyCallackRegister (@cbak);

dll में

टाइप
TMyCallBackProc = प्रक्रिया (जानकारी: सूचक);
था
CbakAddr: TMyCallBackProc;
..........

प्रक्रिया MyCallackRegister (addr: TMyCallBackProc); // और इसे निर्यात करने के लिए मत भूलना
शुरू करना
CbakAddr: = addr;
अंत;

......................
/ * और यह एक इवेंट हैंडलर है * /
प्रक्रिया Datamodule1PosleAtomnoiVoiny (प्रेषक: TTerrorist);
शुरू करना
CbackAddr (प्रेषक);
अंत;

!!! मैंने यहीं लिखा, हो सकता है कि जहाँ धागा, चे-थ्रेड एक साथ नहीं बढ़ता है, लेकिन विचार इस से ग्रस्त नहीं है



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

> पेट्र_व_आ
सब कुछ ठीक है ... केवल कुल्हाड़ियों woleyshon बीमार थे ...

बुरा सवाल
आपका क्या मतलब था

फंक्शन cbak (जानकारी: पॉइंटर) शुरू करना दिखावा ("उफ़!"); अंत;

जहां यह समाप्त नहीं हुआ है ... क्या कार्य .... लेकिन यह एक गड़बड़ है।
और कैसे इन तक पहुँचने से डरें?
मुझे नहीं पता कि क्या सोचना है ...
कार्यक्रम आपके कोड में इसके समान एक क्षण में झुकता है ... 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]

> यूजीन ज़ेलिकोवस्की ©
आप कॉलबैक फ़ंक्शन के रूप में विधि का उपयोग नहीं कर सकते हैं, लेकिन एक पैरामीटर के रूप में कॉलिंग ऑब्जेक्ट और रैखिक एडाप्टर फ़ंक्शन के पते के लिए एक अलग लिंक पास करें। Dll के साथ काम करने के लिए stdcall सम्मेलन का उपयोग करना और भी बेहतर है (हम अन्य विकास साधनों के साथ बेहतर संगतता प्राप्त करेंगे)। उदाहरण के लिए, इस तरह (केवल एक सामान्य दृष्टिकोण):

टाइप
TMyCallback = प्रक्रिया (संदर्भ: सूचक); stdcall; // कॉलबैक एडाप्टर प्रक्रिया

निर्यात की गई प्रक्रिया:

प्रक्रिया SomeProc (संदर्भ: सूचक; MyCbk: TMyCallback); stdcall;

उसे इस तरह बुलाओ:

प्रक्रिया TMyObject.CallSomeProc;
शुरू करना
SomeProc (स्व, @MyCallback);
अंत;

प्रक्रिया TMyObject.SomeMethod;
शुरू करना
// कुछ कार्रवाई
अंत;

कॉलबैक प्रक्रिया हैंडलर:

प्रक्रिया MyCallback (संदर्भ: सूचक); stdcall;
शुरू करना
TMyObject (संदर्भ) ।SomeMethod;
अंत;

शायद आप इस विकल्प को अधिक पसंद करेंगे :)



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

> वाई-सॉफ्ट
लेकिन "विधि का कॉलबैक फ़ंक्शन केवल" नहीं किया जा सकता है और इसका उपयोग नहीं किया जाएगा, "और यदि आप इसका उपयोग करते हैं, तो एक्सेसरी की गारंटी है



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

> पेट्र_व_आ
सामान्य तौर पर, मैंने वह तरीका बनाया जो आपने काम का सुझाव दिया था .... लेकिन केवल एक बार ... तो वह परवाह नहीं करता ... जवाब नहीं देता ...
> वाई-सॉफ्ट
मुझे आपका तरीका समझ नहीं आया
आपका क्या मतलब था:
प्रक्रिया MyCallback (संदर्भ: सूचक); stdcall; शुरू करना --- TMyObject (संदर्भ) ।SomeMethod; --- // अंत;



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

डेल्फी पर किसी भी अधिक या कम सभ्य पुस्तक में डीएलएल के साथ काम किया गया है।
मैंने एक पुस्तक खरीदी, इसे पढ़ा, समझा (यह आवश्यक है!)।

और हम यहां बगीचे क्यों लगा रहे हैं और पौधे लगा रहे हैं?

PS एक व्यक्ति एक DLL के साथ काम करने का तरीका नहीं जानता है - उसे अध्ययन करने दें, और फिर वह पहले से ही सोचता है कि क्या यह वहां सामान भरने लायक है।



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

> IZEN
एक कम सभ्य किताब में, एक DLL के साथ काम करने का वर्णन किया गया है:
आप उस हाँ फ़ंक्शन को रख सकते हैं जो आपको 2 + 2 ...
आदि
और कॉलबैक के साथ काम मुख्य रूप से COM / DCOM अनुभाग में लिखा गया है और यह पूरी बात है .... जिसके साथ मैं अभी सीखना शुरू कर रहा हूं ...
खैर, नहीं जब मैंने कॉलबैक का उपयोग नहीं किया था और .... अब मैं सीखना चाहता हूं ...।
और वहाँ कुछ भी नहीं होने के लिए आक्रोश है ... अगर स्मार्ट मुझे बताओ ... अगर कोई चुप्पी नहीं है ...



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

> यूजीन ज़ेलिकोव्स्की एक बार क्यों, यह कार्यक्रम के तर्क में है, देखो, इसके अलावा वे झूठ बोल रहे हैं जो यह पता लगाएंगे कि कम से कम यह एक और सवाल है। कड़ी मेहनत करें, आगे डीबग करें स्वयं, और किसी पर ध्यान न दें :)



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

कॉलबैक - तथाकथित "कॉलबैक"। इसका आविष्कार इसलिए किया गया था कि कोई भी कार्यक्रम किसी अन्य कार्यक्रम के लिए अपना कार्य (इसका पता) "हथेली" कर सकता है, ताकि बाद वाला (दूसरा कार्यक्रम) इसे पहले से फिर से इकट्ठा किए बिना और / या पहले कार्यक्रम के कोड का विश्लेषण कर सके - यह असभ्य है।

कॉलबैक का उपयोग किसी भी विंडो प्रोग्राम में ईवेंट हैंडलिंग के साथ किया जाता है: उदाहरण के लिए, प्रोग्रामर द्वारा लिखित ईवेंट हैंडलर विंडोज विंडो ईवेंट हैंडलर के मुख्य कार्य से कॉलबैक कॉल में प्रत्यक्ष प्रतिभागी होते हैं। वह सब है।

हां, डेल्फी में एक बटन ईवेंट हैंडलर लिखते समय भी, आप एक कॉलबैक प्रक्रिया लिखते हैं, जिसे कंपाइलर तब बटन विंडो फ़ंक्शन को असाइन करेगा।

यहां तक ​​कि शुरुआती पास्कल में, प्रक्रियात्मक प्रकार का उपयोग कॉलबैक तंत्र (कॉलबैक, या देर से कॉल) प्रदान करने के लिए किया जाता है:
टाइप TMyProcedure = प्रक्रिया (a: पूर्णांक; b: चार; c: स्ट्रिंग [23]); वर MyHandler: TMyProcedure; प्रक्रिया OtherProcedure (a: पूर्णांक; b: चार; c: स्ट्रिंग [83]); शुरू करना WriteLn (ए); WriteLn (बी); WriteLn (c); अंत; शुरू ... MyHandler: = अन्य प्रक्रिया; ... MyHandler (10, "f", "मेरे दिल के नीचे से नमस्ते!")! अंत।

इसलिए, पहले डीएलएल के साथ काम का अध्ययन करना बेहतर है, यह अधिक तार्किक होगा।



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

मैं आपको सलाह देता हूं कि कॉलबैक और COM / DCOM की अवधारणाओं को कनेक्ट न करें, इससे समस्या का अध्ययन करने में बहुत मदद नहीं मिलती है।



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

> TMyProcedure = प्रक्रिया (a: पूर्णांक; b: चार; c: स्ट्रिंग [23]);
सुधार:
टाइप
TMyProcedure = प्रक्रिया (a: पूर्णांक; b: चार; c: स्ट्रिंग [83]);



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

> यूजीन ज़ेलिकोवस्की ©

स्पष्टीकरण:

पुस्तकालय में हमारी वस्तु के प्रकार को जानने की जरूरत नहीं है, इसलिए हम पुस्तकालय से एक प्रक्रिया का आह्वान करते समय एक अप्रकाशित सूचक को पास करते हैं। ऐसी भाषाएं हैं जिनमें संदर्भ प्रकार पूरी तरह से अनुपस्थित हैं - इस मामले में यह हमारे ऑब्जेक्ट को इंटेगर के लिए एक संकेतक डालने के लायक है।

प्रक्रिया TMyObject.CallSomeProc; शुरू करना SomeProc (स्व, @MyCallback); अंत;

Dll कोड में:

प्रक्रिया SomeProc (संदर्भ: सूचक; MyCbk: TMyCallback); stdcall; शुरू करना // ... कुछ क्रियाएं MyCbk (संदर्भ); // कॉलबैक कॉल करें अंत;

तदनुसार, कॉलबैक प्रक्रिया हैंडलर में, हम स्पष्ट रूप से टाइप रूपांतरण करते हैं

प्रक्रिया MyCallback (संदर्भ: सूचक); stdcall; शुरू करना TMyObject (संदर्भ) ।SomeMethod; // यहाँ !!! अंत;

COM / DCOM में, इसी तरह के उद्देश्यों के लिए पूरी तरह से अलग तंत्र का उपयोग किया जाता है।



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

सभी को धन्यवाद। अर्जित !!!!!!
> पेट्र_व_आ
आपका दृष्टिकोण मेरे काम के लिए छोटे सुधारों के साथ सबसे अधिक काम करने वाला निकला ....
> iZEN
और मदद के लिए धन्यवाद ... और इतिहास में एक भ्रमण !!!!



पन्ने: 1 पूरी शाखा

मंच: "मुख्य";
वर्तमान संग्रह: 2002.01.08;
डाउनलोड करें: [xml.tar.bz2];

ऊपर





मेमोरी: 0.65 एमबी
समय: 0.033 c
1-22241
Yuraz
2001-12-17 10:09
2002.01.08
FileListBox1.FileName फ़ाइल के लिए पूर्ण पथ देता है, यह केवल फ़ाइल नाम वापस कैसे करें?


1-22106
Andrey196
2001-12-19 18:24
2002.01.08
लैमर प्रश्न के लिए क्षमा करें कि छवि कैसे प्रिंट करें


4-22497
Syrius
2001-11-07 09:13
2002.01.08
डेल्फी 6 और Win32 एपीआई


1-22148
Delphimun
2001-12-20 12:10
2002.01.08
सिस्टम को एक संदेश कैसे भेजें कि एक कुंजी दबाया जाए?


1-22140
Serg5
2001-12-20 10:17
2002.01.08
यह सवाल कि क्या 4 पिक्सल के लिए फ़ॉन्ट को कम करना संभव है, यह बदल जाता है, यह बदल जाता है (कार्यक्रम शपथ नहीं लेता है), लेकिन स्क्रीन पर (Canvas.Font) यह अभी भी 8 (सबसे न्यूनतम) प्रदर्शित करता है





अफ्रीकी अल्बानियन अरबी भाषा अर्मेनियाई आज़रबाइजानी बस्क बेलारूसी बल्गेरियाई कैटलन सरलीकृत चीनी) चीनी पारंपरिक) क्रोएशियाई चेक डेनिश डच अंग्रेज़ी एस्तोनियावासी फिलिपिनो फिनिश फ्रेंच
गैलिशियन् जॉर्जियाई जर्मन यूनानी हाईटियन यहूदी हिंदी हंगरी आइसलैंड का इन्डोनेशियाई आयरिश इतालवी जापानी कोरियाई लात्वीयावासी लिथुआनियाई मेसीडोनियन मलायी मोलतिज़ नार्वेजियन
फ़ारसी पोलिश पुर्तगाली रोमानियाई रूसी सर्बियाई स्लोवाक स्लोवेनियाई स्पेनिश स्वाहिली स्वीडिश थाई तुर्की यूक्रेनी उर्दू वियतनामी वेल्श यहूदी बंगाली बोस्नियाई
सिबुआनो एस्पेरांतो गुजराती हौसा हमोंग ईग्बो जावानीस कन्नड़ खमेर लाओ लैटिन माओरी मराठी मंगोलियन नेपाली पंजाबी सोमाली तामिल तेलुगु योरूबा
ज़ुलु
Английский Французский Немецкий Итальянский Португальский Русский Испанский