2010-07-13 20 views
5

हम सिर्फ सीपीपी वी.एस. साथ /clr:pure तर्क के साथसी पुस्तकालय को .NET dll में कैसे संकलित करें?

extern "C" { 
#include <library.h> 
} 

की तरह कोड युक्त परियोजना संकलन के द्वारा नेट dll (युक्त और सभी सी libs कार्यों के लिए खोलने का उपयोग) के रूप में सी पुस्तकालय संकलन कर सकते हैं? (वीएस 10)

या हमें कुछ और चाल चलाना चाहिए?

उत्तर

3

मुझे लगता है कि इसके लिए पुरानी शैली प्रबंधित सी ++ का उपयोग करना सबसे अच्छा है।

CLR:PURE बस इसे काट नहीं पाएंगे।

उदाहरण:

extern "C" int _foo(int bar) 
{ 
    return bar; 
} 

namespace Bar 
{ 
    public __gc class Foo 
    { 
    public: 
    Foo() {} 

    static int foo(int bar) 
    { 
     return _foo(bar); 
    } 
    }; 
}; 

संकलित साथ: /clr:oldSyntax

अब आप assebmly संदर्भित कर सकते हैं, और नेट से Bar.Foo.foo() कहते हैं।

+0

इसका मतलब क्या है - कृपया सरल नमूना प्रदान करें? – Rella

+0

@ ओले जैक: उदाहरण जोड़ा गया। – leppie

+0

क्या आप समझा सकते हैं कि '__gc' क्या है, यह कोड .net dll में कैसे संकलित होगा (मेरा मतलब है कि हम इसमें क्या समझेंगे और कैसे?) – Rella

3

यह वास्तव में आपके सी कोड पर निर्भर करता है।

पी/Invoke अक्सर शुरू करने के लिए सबसे आसान है, और आईएमओ कुछ हद तक कार्यों के लिए काफी काम करने योग्य है। प्रदर्शन जरूरी नहीं है, और मैं इसके बाहर एक संपूर्ण कार्यक्रम नहीं बनाऊंगा - लेकिन कुछ कार्यों का पुन: उपयोग करने के लिए, यह सार्थक है।

सी से जा रहे हैं करने के लिए/clr: शुद्ध करने की आवश्यकता है:

  1. Convert your C code to C++
  2. Convert your C++ code to Visual C++
  3. Compile with /clr option
  4. Compile with /clr:pure

अपने कोड की वर्तमान स्थिति है (और यह है पुस्तकालय) निर्देश देंगे कि प्रक्रिया कितनी दर्दनाक है।

+0

"था" कहता है कि आपको पी/Invoke उपयोग करने की आवश्यकता नहीं है .NET dll। "था" का कहना है कि आप सी ++ (सीपीपी फाइल) कोड को संकलित कर सकते हैं। नेट डीएलएल को 'clr: pure' तर्क का प्रयोग वीएस के साथ कर सकते हैं। – Rella

+0

@ ओले - "वे" सही हैं। यह सी से उस बिंदु पर जा रहा है जो आपको फिट करने की संभावना है। –

+0

अपने दूसरे में (मैंने गिनती खो दी है, शायद पांच) इस बारे में प्रश्न, ओले ने एक आवश्यकता निर्धारित की है कि सबकुछ एक फ़ाइल में संकलित हो। 'DllImport' आपको वहां नहीं ले जाएगा। –

1

यह आमतौर पर यह नहीं दिया जाता है कि आप कुछ परिवर्तन किए बिना सी कोड को सी ++ के रूप में संकलित भी कर सकते हैं। यदि आप सी ++ के रूप में संकलित करने के लिए अपना सी कोड प्राप्त कर सकते हैं, तो आप इसे C++/CLI के रूप में संकलित करने का प्रयास कर सकते हैं (यही वह है जो क्लियर: शुद्ध विकल्प करता है)।

उस समय, आप किसी प्रकार की कक्षा बना सकते हैं जो आपके सभी निर्यात किए गए कार्यों को सार्वजनिक (प्रबंधित) कक्षा के स्थैतिक तरीकों के रूप में उजागर करता है।

इस प्रकार की सामग्री के कुछ स्वाद सी ++ प्रीप्रोसेसर ट्रिक्स (मैक्रोज़ इत्यादि) के साथ किए जा सकते हैं, कभी-कभी आप मैन्युअल रूप से लिखने वाले रैपर को समाप्त करते हैं।

तो मूलभूत जानकारी जिसे आप सी /+ को .NET असेंबली में/clr का उपयोग करके संकलित कर सकते हैं: xxx विकल्प सत्य हैं, लेकिन इसका मतलब यह नहीं है कि एक उपयोगी चीज है जो आपको उपयोगी .NET असेंबली प्राप्त करने के लिए करना है।

+0

क्या ब्लॉग लेखों में कुछ प्रकार के कदम या sucsess की कहानियां हैं या ऐसा कुछ है? – Rella

4

यह आपकी रुचि का हो सकता है: Compiling your C code to .NET

एक सी संकलक

occil.exe बनाएँ सी कोड उदाहरण के stack.c

चरण 1 से एक .NET dll बनाने के लिए: ढेर का निर्माण।आईएल कोड को ग

occil /ostackdll.il /c /Wd /9 /NStackLib.Stack stack.c 

चरण 2: उत्पन्न आईएल कोड के लिए नेट का निर्माण DLL

ilasm /DLL stackdll.il 

तो फिर तुम संदर्भ एसी # कार्यक्रम में stack.dll और स्टैक में सी समारोह कॉल कर सकते हैं .c

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