2011-05-30 9 views
6

से कॉल सी # डीएल मैंने एकल विधि के साथ नेट 3.5 डीएल बनाया, जिसे डेल्फी .exe द्वारा बुलाया जाना है। दुर्भाग्य से यह काम नहीं करता है।डेल्फी

कदम: 1. बनाएं सी # 3.5 कोड के साथ dll:

public class MyDllClass 
{ 
    public static int MyDllMethod(int i) 
    { 
     MessageBox.Show("The number is " + i.ToString()); 
    } 
} 
  1. जाओ विधानसभा गुण के लिए -> विधानसभा सूचना और "बनाने के विधानसभा कॉम दृष्टव्य"
  2. प्रयुक्त चेक किया RegAsm.exe को मेरे डीएल

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

क्या कोई इस विषय के बारे में अच्छा उदाहरण से परिचित है?

धन्यवाद

+0

वास्तव में किस प्रकार आप वस्तु कनेक्ट करने के लिए कोशिश कर रहे हैं? क्या आप इसे विज़ार्ड का उपयोग कर आयात कर रहे हैं (जो आपके लिए एक रैपर इकाई उत्पन्न करता है) या आप सीधे लाइब्रेरी लोड कर रहे हैं? –

+0

मुझे इन मुद्दों के लिए समाधान मिला - –

उत्तर

7

भारी जांच के बाद मुझे समाधान मिला: यह पंजीकरण मानदंडों के बारे में है। ध्वज/कोडबेस को regasm कमांड में जोड़ा जाना चाहिए।

सी # कॉम एक्सपोज़ड ऑब्जेक्ट पर ग्रिड और अन्य COM विशेषताओं का उपयोग करने के लिए कई पोस्ट्स का सुझाव दिया गया है, मैं कॉमविज़िबल (सत्य) विशेषता और regasm/tlb/codebse कमांड का उपयोग करके COM कार्यक्षमता प्रदान करने में कामयाब रहा।

कोड:

[Guid("7DEE7A79-C1C6-41E0-9989-582D97E0D9F2")] 
[ComVisible(true)] 
public class ServicesTester 
{ 
    public ServicesTester() 
    { 
    } 

    //[ComVisible(true)] 
    public void TestMethod() 
    { 
     MessageBox.Show("You are in TestMEthod Function"); 
    } 
} 

और के रूप में मैं मैं इसे रजिस्टर करने के लिए Regasm.exe/tlb/codebase इस्तेमाल किया उल्लेख किया

-7

आप उपकरण आप उपयोग कर रहे बारे में अधिक जानने चाहिए। आप अभी तक एक और (बहुत आसान नहीं) तकनीक का उपयोग करके दो अलग-अलग दुनिया (नेट, डेल्फी) को जोड़ने का प्रयास करते हैं: COM। आपका प्रश्न स्पष्ट रूप से स्पष्ट करता है कि आपके पास COM की अच्छी अंडरस्टेशनिंग नहीं है और शायद .Net की नहीं है। कोई साधारण उदाहरण नहीं है जो वास्तव में आपके उपयोग के मामले को हल करता है। आपको COM सीखना होगा, आपको सीखना होगा कि .NET कोड को COM पर कैसे उपलब्ध कराया जाए और फिर आपको सीखना होगा कि डेल्फी से COM ऑब्जेक्ट्स को कैसे कॉल करें। यह पहले से ही शॉर्टकट है। कोई और शॉर्टकट उपलब्ध नहीं हैं!

+13

से नीचे का जवाब देखें मुझे नहीं लगता कि यह आपके प्राथमिक शिक्षक द्वारा आपके हाथ पर एक (प्रतीकात्मक) थप्पड़ की तरह व्यावहारिक उत्तर पोस्ट करने के लिए उत्पादक है क्योंकि आप शरारती हैं। मुझे मूल प्रश्न के साथ कुछ भी गलत नहीं दिख रहा है। उसे गलतियाँ करने की इजाजत है, आपने गलतियां की हैं, मैंने गलतियां की हैं, मैं उनसे सीखता हूं और मैं आगे बढ़ता हूं। – costa

2

यदि आप अपनी असेंबली x64 या AnyCPU बनाते हैं तो एक समस्या हो सकती है। चूंकि डेल्फी 32 बिट (x86) है, इसलिए आपको अपनी असेंबली x86 बनाने की ज़रूरत है या यह सुनिश्चित कर लें कि regasm.exe इसे 32 बिट्स रजिस्ट्री में भी पंजीकृत करता है। आप regasm.exe के x86 संस्करण का उपयोग कर ऐसा करते हैं।

29

आप उपयोग करते हुए मेरे project template for unmanaged exports

class MyDllClass 
{ 
    [DllExport] 
    static int MyDllMethod(int i) 
    { 
     MessageBox.Show("The number is " + i.ToString()); 
     return i + 2; 
    } 
} 

डेल्फी में, आप इतना है कि यह आयात होता द्वारा अधिक भाग्य कॉम हिस्सा लंघन हो सकता है:

function MyDllMethod(i : Integer) : Integer; stdcall; extern 'YourAssembly.dll'; 

मैं आपके सवाल का नीचे वोट करने के लिए किया था, हालांकि। संकलन करने वाले कोड प्रदान करने के लिए उतना ही देखभाल नहीं करना चाहिए। (आपकी सी # विधि एक मान वापस नहीं करती है, फिर भी यह int की अपेक्षा करता है)

+0

हाय रॉबर्ट, मैं ज़िप फ़ाइल को उचित स्थान (मेरे दस्तावेज़ \ विजुअल स्टूडियो 20 ** \ टेम्पलेट्स \ ProjectTemplates) में रखने के बाद टेम्पलेट नहीं देख सकता। मैं वीएस -2010 का उपयोग कर रहा हूं, क्या आप इससे परिचित हैं? –

+0

आपने UnmanagedExportLibrary.zip डाउनलोड किया है, है ना? नमूने वाले पृष्ठ में DllExport.zip का एक लिंक है, जो केवल बिल्ड कार्य और कुछ पुस्तकालय हैं, टेम्पलेट नहीं। यदि आपने टेम्पलेट का उपयोग किया है: टूल्स/विकल्प/प्रोजेक्ट्स और सॉल्यूशंस पर जाएं। वहां आपको संपत्ति "उपयोगकर्ता प्रोजेक्ट टेम्पलेट्स स्थान" मिलेगा। यह वह फ़ोल्डर है जिसमें वीएस परियोजना टेम्पलेट्स की खोज करेगा। –