2010-06-18 12 views
5

मैं ओडीबीसी स्टैक को मारने से पहले ओडीबीसी कॉल को संशोधित करने या कनेक्शन के लिए ओडीबीसी स्टैक और डीएलएल ड्राइवर के बीच संशोधित करने के लिए देख रहा हूं। उदाहरण के लिए, यदि एप्लिकेशन एक चयन करता है, तो मैं इसे संशोधित करने में सक्षम होना चाहता हूं, मैं इसे कैसे कर सकता हूं?मैं विंडोज ओडीबीसी कॉल को कैसे रोक/पुनः लिख सकता हूं?

उत्तर

1

ओडीबीसी सेटअप जानकारी ड्राइवर डीएलएल को इंगित करती है। आप इसे अपने स्वयं के डीएलएल से बदल सकते हैं जिसमें ओडीबीसी एंट्री पॉइंट्स हैं। बस उन सभी को बनाएं जिन्हें आप "असली" डीएलएल को सरल कॉल करने की परवाह नहीं करते हैं। निष्पादन और एंट्रीपॉइंट तैयार करने से ड्राइवर डीएलएल को पास करने से पहले दिए गए कथन को संशोधित किया जा सकता है।

उदाहरण के लिए, यदि उपयोगकर्ता डीएसएन का उपयोग करते हैं, तो आप अपने स्वयं के शिम डीएलएल के साथ HKCU \ Software \ ODBC.ini \ datasourcename \ Driver में मान को प्रतिस्थापित कर सकते हैं।

थोड़ी सी गुगलिंग के बाद, मुझे एक स्पष्ट खाली खोल परियोजना नहीं मिल रही है जो एक आदर्श प्रारंभिक बिंदु होगा। API reference में एपीआई के बारे में विवरण है। आम तौर पर, आपको वास्तव में वहां से जानकारी की आवश्यकता नहीं है। आपको केवल एपीआई चालक डीएलएल को प्रत्येक एपीआई के पैरामीटर पास करने की आवश्यकता है। फ़ंक्शन प्रोटोटाइप को sql.h और sqlext.h से निकाला जा सकता है।

एक वैकल्पिक विधि जो एक शिम डीएलएल लिखने से आसान हो सकती है, केवल निष्पादन और कार्यों को तैयार करना होगा (शायद केवल SQLExecDirect और SQLPrepare)। This article ऐसा पहला हिट है जिसे मैंने ऐसा करने पर देखा था।

+0

सलाह के लिए धन्यवाद, मैंने इसके बारे में सोचा था। मैंने एक सी ++ डीएलएल करने की कोशिश की जो सभी निर्यात किए गए तरीकों को अग्रेषित कर दिया, लेकिन काम करने के लिए भाग्य प्राप्त नहीं हुआ। गूगल के लिए कोई अच्छा कीवर्ड? एक बार फिर धन्यवाद। – TwoBitsShort

+0

@ क्रिस्टियन: सुनिश्चित करें कि आप निर्यात पर 'बाहरी "सी'' का उपयोग करें ताकि नाम उलझन में न हों। आप यह सुनिश्चित करने के लिए डीएलएल पर 'डंपबिन/निर्यात' का उपयोग कर सकते हैं कि वे सजाए नहीं गए हैं। मैं Google के साथ थोड़ा सा पोक करूंगा और देख सकता हूं कि मुझे कुछ मिल सकता है या नहीं। आदर्श रूप से, एक खाली खोल प्राप्त करना अच्छा होगा जिसमें सभी एंट्रीपॉइंट फ़ंक्शंस परिभाषित किए गए हों। ... लगता है कि उस प्रकृति में से कुछ मौजूद होना चाहिए। –

+0

@mark: मैंने डंपबिन के साथ स्कैन किया और फिर सभी निर्यात किए गए कार्यों को घोषित करने के लिए .def फ़ाइलों का उपयोग किया। मुख्य दिनचर्या मूल odbc ड्राइवर की एक लोड लाइब्रेरी करता है और मैंने रजिस्ट्री को मेरे शिम डीएल को इंगित करने के लिए बदल दिया है। मैंने प्रज्ञा दृष्टिकोण भी कोशिश की। प्रत्येक बार मुझे एक नोटिस मिलता है कि ड्राइवर SQLDirectConnectW विधि का समर्थन नहीं करता है। DirectConnectW निर्यात तालिका में नहीं है, और डायरेक्टकनेक्ट का सिर्फ एक यूनिकोड संस्करण है। कोई विचार? – TwoBitsShort

संबंधित मुद्दे