2009-07-07 21 views
5

मैं झूठ नहीं बोल रहा हूं। मैं विंडोज और COM ऑब्जेक्ट्स से परिचित नहीं हूं। इसलिए मैं यहां हूँ। सबसे पहले क्या Apache से बाहर चल रहे एक PHP स्क्रिप्ट के भीतर से एक डीएलएल का उपयोग करना संभव है? Internets के चारों ओर मेरी यात्रा में मेरा मानना ​​है कि मेरे पास 2 विकल्प हैं:PHP में डीएलएल का प्रयोग करें?

  1. डीएल को PHP के विस्तार के रूप में संकलित करें। (मैंने यह डीएल नहीं बनाया)
  2. डीएलएल को COM ऑब्जेक्ट के रूप में एक्सेस करें जो कि किसी भी तरह से डिज़ाइन किया गया है।

तो मैं COM दृष्टिकोण ले रहा हूं।

try{ 
    $com = new COM('WHAT_GOES_HERE'); 
} catch(Exception $e){ 
    echo 'error: ' . $e->getMessage(), "\n"; 
} 

प्रारंभिक स्ट्रिंग में क्या होगा, यह जानने के लिए मैं कैसे जा सकता हूं? क्या यह एक कॉम व्यूअर टाइप प्रोग्राम है जिसे मैं ढूंढने के लिए उपयोग कर सकता/सकती हूं? इस डीएलएल से जुड़े दस्तावेज यह निर्दिष्ट नहीं करते हैं कि मुझे किस स्ट्रिंग का उपयोग शुरू करने के लिए किया जाना चाहिए, लेकिन कौन सी धाराएं उपलब्ध हैं, और सभी प्रकार की मजेदार सामग्री में बहुत गहराई से मिलती है। बस इस प्रारंभिक कूबड़ से पहले होना चाहिए। कृपया सहायता कीजिए!

उत्तर

4

WHAT_GOES_HERE ऑपरेटिंग सिस्टम पर पंजीकृत प्रोगिड, क्लास आईडी या मोनिकर है।

इनमें से प्रत्येक विभिन्न मशीनों पर पंजीकृत उसी डीएलएल के लिए बदल सकता है। एक पंजीकृत डीएल के प्रोगिड/सीएलएसआईडी/मोनिकर को खोजने के कई तरीके हैं। आप "डीएल डीबगर", "डीएलएल निर्यात", "डीएलएल निरीक्षण" के लिए वेब पर खोज कर सकते हैं और आपको कई समाधान दिखाई देंगे, और यह दिखाने के तरीके भी होंगे कि डीएलएल निर्यात क्या काम करता है ताकि आप उनका उपयोग कर सकें।

सबसे आसान तरीका, आप बस डीएसएल को Regsvr32.exe के साथ पंजीकृत कर सकते हैं और dll के नाम के लिए regedit.exe के साथ विंडो के रजिस्टर को खोज सकते हैं, आपको \HKEY_CLASSES_ROOT\ के तहत कुंजी खोजने तक कई बार खोजना पड़ सकता है, जो प्रोजेड है ।

कमांड dcomcnfg.exe COM ऑब्जेक्ट्स के बारे में बहुत सारी जानकारी दिखाता है।

यदि आपके पास विजुअल स्टूडियो है, तो OLE/COM ऑब्जेक्ट व्यूअर (oleview.exe) उपयोगी हो सकता है।

1

आप Winbinder के साथ डीएलएल फ़ंक्शन (डीएलएस से जो php एक्सटेंशन नहीं हैं) चला सकते हैं। http://winbinder.org/ इसका उपयोग करना आसान है। आपको php_winbinder.dll डाउनलोड करना होगा और इसे php.ini में एक्सटेंशन के रूप में शामिल करना होगा।

function callDll($func, $param = "") 
{ 
    static $dll = null; 
    static $funcAddr = null; 
    if ($dll === null) 
    { 
     $dll = wb_load_library(<DLL PATH AND FILENAME>); 
    } 
    $funcAddr = wb_get_function_address($func, $dll); 
    if ($param != "") 
    { 
     return wb_call_function($funcAddr,array(mb_convert_encoding($param,"UTF-16LE"))); 
    } 
    else 
    { 
     return wb_call_function($funcAddr); 
    } 
} 
+0

Winbinder 2010 से अपडेट नहीं किया गया है और दुख की बात है कि यह एक मृत ओएसएस परियोजना है। :( – DavidScherer

1

आप बस अपने मुख्य dll के चारों ओर एक आवरण विकसित करने और अपने PHP में एक विस्तार के रूप में इस आवरण का उपयोग कर सकते हैं: PHP स्क्रिप्ट में आप कुछ इसी तरह का उपयोग करने के लिए है। SWIG जैसे कुछ निःशुल्क टूल आपके डीएलएल फ़ंक्शंस के शीर्षलेख प्राप्त करके स्वचालित रूप से आपके लिए इस रैपर को उत्पन्न कर सकते हैं। मैं स्वयं इस दृष्टिकोण का उपयोग करता हूं और यह आसान और भरोसेमंद था।

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