2011-12-12 10 views
8

मैं एक सी ++ dll मैं लिखा है (मूल, नहीं .net) है में काम करता है कॉल करने के लिए, और मैं दृश्य लिस्प से अपनी कार्यक्षमता का उपयोग करना चाहते हैं। क्या कोई मुझे यह कैसे करना है, या कम से कम दस्तावेज पढ़ने के उदाहरण के बारे में बता सकता है?दृश्य लिस्प: कैसे बाहरी सी ++ DLL

उत्तर

6

मैं अपने dll, जो मुझे लगता है कि यह आसान भविष्य में से जोड़ने के लिए करना चाहिए के लिए एक ActiveX/COM आवरण लिख कर इस को हल किया। the swamp पर एक थ्रेड शुरू करने से विज़ुअल लिस्प से COM को कॉल करने के बारे में अच्छे लोगों से कुछ जवाब मिले। रिकॉर्ड के लिए, ऐसा कुछ दिखता है:

//in c++... (header and IDL file also needed) 
hresult timestwo(double in,double* out) 
{ 
    *out = in*2; 
    return S_OK; 
} 

;; in Lisp... 
(vl-load-com) 
(setq myinstance (vlax-create-object "mycomwrapperdll.mycomwrapperclass")) 
(setq num 12.34) 
(vlax-invoke-method myinstance 'timestwo num 'newnum) 
(vlax-release-object myinstance) 
;; newnum now contains 24.68 
4

आप acedDefun() और acedRegFunc() API कॉल का उपयोग कर AutoLISP को अपनी मूल सी ++ कोड का पर्दाफाश।

Here Autodesk की प्रोग्रामिंग मंच पर एक चर्चा वास्तव में अपने सवाल पूछने का है।

+1

यह मेरे लिए थोड़ा अलग प्रश्न जैसा दिखता है - पोस्टर ने ऑब्जेक्टएक्स ऐप बनाया है जो कि मैं स्पष्ट करने की कोशिश कर रहा हूं। मैं डीएलएल को संशोधित किए बिना आदर्श रूप से लिस्प से मौजूदा डीएलएल को कॉल करना चाहता हूं। क्या यह संभव है? –

+1

मुझे पता है कि ऑटोलिस्प में कुछ COM हुक हैं, लेकिन मैं वास्तव में उस दृष्टिकोण पर टिप्पणी नहीं कर सकता क्योंकि मैंने व्यक्तिगत रूप से इसका उपयोग नहीं किया है। मैंने हमेशा सोचा कि पतली ऑब्जेक्टएक्स (या .NET समतुल्य) कनेक्टर का निर्माण। डीएल आसान दृष्टिकोण था। (लेकिन फिर मैं दशकों से एक सी ++ प्रोग्रामर रहा हूं :) –

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