2012-04-08 11 views
8

डी प्रोग्राम से सी ++ फ़ंक्शन को कैसे कॉल करें? मैं अभी भी समझ नहीं पा रहा हूं कि इसे कैसे किया जाए। मुझे निष्पादित करने के लिए किन आदेशों की आवश्यकता है? मैं फेडोरा में डीएमडी का उपयोग करता हूं।डी भाषा से सी ++ (सी) कॉल करें

+2

http://dlang.org/interfaceToC.html को देखने का प्रयास करें, हालांकि यह केवल सी के साथ काम करता प्रतीत होता है। आप यहां C++: http://dlang.org/cpp_interface को इंटरफ़ेस करने के तरीकों पर प्रस्ताव देख सकते हैं। एचटीएमएल –

+0

मैंने उस ट्यूटोरियल को देखा। यह .di फ़ाइल के बारे में विवरण चूक गया। व्लाद के लिए धन्यवाद जो मेरे समाधान के साथ साझा करता है। – Stan

उत्तर

14

सबसे सरल उदाहरण मैं, के बारे में सोच सकते हैं कि आप सी कार्यों बुला रहे हैं:

$ cat a.c 
int f(int a, int b){ 
    return a + b + 42; 
} 
$ cat a.di 
extern (C): 
int f(int, int); 
$ cat b.d 
import std.stdio; 
import a; 
void main(){ 
    writeln(f(100, 1000)); 
} 
$ gcc -c a.c 
$ dmd b.d a.o 
$ ./b 
1142 
$ 

आप साझा वस्तुओं का उपयोग कर रहे हैं, तो आप कर सकते थे तो कुछ इस तरह:

$ cat sdltest.di 
module sdltest; 

extern (C): 

struct SDL_version{ 
    ubyte major; 
    ubyte minor; 
    ubyte patch; 
} 

SDL_version * SDL_Linked_Version(); 

$ cat a.d 
import std.stdio; 
import sdltest; 

void main(){ 
    SDL_version *ver = SDL_Linked_Version(); 
    writefln("%d.%d.%d", ver.major, ver.minor, ver.patch); 
} 

$ dmd a.d -L-lSDL 
$ ./a 
1.2.14 
$ 

इस उदाहरण में , मैंने SDL फ़ंक्शन से लिंक किया है। -Ldmd पर तर्क आपको ld पर तर्क देने की अनुमति देता है, इस मामले में -lSDL एसडीएल से लिंक करने के लिए।

डी इंटरफ़ेस फ़ाइलें (.di) here वर्णित हैं।

आपको htod पर भी एक नज़र डालना चाहिए।

+0

यह बढ़िया है! आपका बहुत बहुत धन्यवाद। यह काम करता हैं। .di फ़ाइल क्या है? मैंने इससे पहले नहीं पढ़ा है। – Stan

+0

तो, उदाहरण के लिए, libxml का उपयोग करने के लिए मुझे उन कार्यों के लिए बाइंडिंग लिखने की आवश्यकता है जिन्हें मैं उपयोग करने जा रहा हूं, है ना? – Stan

+1

@ स्टैनिस्लाव फेल्डमैन: मुझे ऐसा लगता है, जब तक कि किसी ने इसे पहले नहीं किया हो। कुछ लोकप्रिय पुस्तकालयों में पहले से ही डी बाइंडिंग है। क्या आपको विशेष रूप से libxml की आवश्यकता है? डी में एक ['std.xml'] (http://dlang.org/phobos/std_xml.html) मॉड्यूल है। मैंने साझा पुस्तकालयों के साथ एक संकलन उदाहरण भी जोड़ा है। – Vlad