Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Expose .NET User control as COM and embed it to a visual c++ 6.0 application

Îåêßíçóå áðü ôï ìÝëïò hspais. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 23-01-2008, 14:08. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  21-12-2007, 13:44 38564

    Expose .NET User control as COM and embed it to a visual c++ 6.0 application

    Καλησπέρα απο το νέο μέλος του forum (hspais)

    Θα ήθελα την βοήθειά σας στο παρακάτω θέμα:

    Έχω αναπτύξει ένα .net user control και θέλω να εμφανίζεται σε ένα σημείο ενός παραθύρου μίας εφαρμογής που έχει αναπτυχθεί σε Visual c++ 6.0.

    Η λύση που έχει προταθεί είναι να εκτεθεί το συγκεκριμένο User control ως ActiveX και να ενσωματωθεί στην εφαρμογή μέσω της τεχνολογίας COM.

    Είναι γνωστό ότι η Microsoft υποστηρίζει την έκθεση απλών component ως COM και την ενσωμάτωσή τους σε εφαρμογές VC++ 6.0, σύμφωνα όμως με το msdn δεν υποστηρίζεται η έκθεση ενός  .NET user control ως ActiveX και η χρήση του από εφαρμογή C++.

    Έπειτα από έρευνα παρόλα αυτά φάνηκε ότι είναι εφικτό το registration του .NET dll ως ActiveX με την επεξεργασία της registry και επιτεύχθηκε η ενσωμάτωσή του σε μία εφαρμογή VC++.

    Το πρόβλημα έγκειται στο ότι ενώ οι ιδιότητες του COM εμφανίζονται κανονικά στον visual editor, δεν συμβαίνει το ίδιο και με τα events. Χωρίς την ύπαρξη των events δεν είναι εφικτή η πλήρης ενσωμάτωση και λειτουργία της εφαρμογής.

    Η ερώτηση είναι κατά πόσο υπάρχει κάποιος γνωστός, εφαρμοσμένος και υποστηριζόμενος τρόπος από την Microsoft για χρήση ενός ActiveX που έχει προκύψει από .NET User Control σε μία εφαρμογή VC++ 6.0 που να επιτρέπει την χρήση των events.

    Δημοσίευση στην κατηγορία: ,
  •  21-12-2007, 16:05 38569 σε απάντηση της 38564

    Απ: Expose .NET User control as COM and embed it to a visual c++ 6.0 application

    Άσχετο #1: To forum που διάλεξες δεν είναι το κατάλληλο για ερωτήσεις COM, αν και τα Enterprise Services είναι στην πραγματικότητα .NET κλάσεις οι οποίες χρησιμοποιούνται ως COM αντικείμενα.

    Άσχετο #2: Γιατί Visual C++ 6? Έχουν βγει άλλες 4 εκδόσεις της C++, οι οποίες έχουν πολύ καλύτερη υποστήριξη της γλώσσας, της STL αλλά και του COM και 9 χρόνια bug fixes επιπλέον. Το interop είναι επίσης πολύ ευκολότερο καθώς μπορείς να αναμείξεις unmanaged και managed κώδικα. Αλλά και σε πλήρως unmanaged εφαρμογές είναι ευκολότερο να καλέσεις .NET κλάσεις. Τέλος, μπορείς άνετα να βάλεις Winforms User Controls σε MFC dialog boxes και views αλλά και να εμφανίσεις τα User Controls ως dialog boxes - και με πλήρη υποστήριξη events. Δες το Using a Windows Form User Control in MFC .

    Οποιαδήποτε κλάσης του .NET μπορεί να χρησιμοποιηθεί από το COM. Αυτό γίνεται μέσω του COM Interop, γι αυτό και μπορείς να δεις το User Control σου από την C++. To MSDN δεν αναφέρει πουθενά ότι αυτό δεν γίνεται, ακριβώς το αντίθετο. Όσον αφορά τη χρήση .NET events σε unmanaged κώδικα δες το How to: Raise Events Handled by a COM Sink. Προφανώς χρειάζεται να φτιάξεις το User Control σου έτσι ώστε να μπορείς να το χρησιμοποιήσεις από COM κώδικα.

     


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  27-12-2007, 09:31 38645 σε απάντηση της 38569

    Απ: Expose .NET User control as COM and embed it to a visual c++ 6.0 application

    Παναγιώτη,

    ευχαριστώ πολύ για τις πληροφορίες που μου έδωσες.

    Για την λειτουργία του Forum δεν γνωρίζω πολλα πράγματα καθώς είμαι καινούργιος. Ελπίζω την επόμενη φορά

    να μην βάλω το μήνυμα σε λάθος θέση.

    Επίσης είμαι καινούργιος σε προγραμματισμό .ΝΕΤ γιαυτό και ίσως φάνηκε αστεία η ερωτησή μου.

     

    Ευχαριστώ

    Σπαής Ηλίας

     

     

  •  27-12-2007, 10:39 38650 σε απάντηση της 38645

    Απ: Expose .NET User control as COM and embed it to a visual c++ 6.0 application

    Αστεία? Καθόλου. Ίσα-ίσα, η απάντηση της δεν είναι εύκολη, καθώς ή θα πρέπει να μπεις στα βαθειά του interop, ή να κάνεις migrate το project από VC 6 σε VC 9. Το migration θα πρέπει να γίνει κάποια στιγμή, αν όχι για τίποτε άλλο, για να μπορείς να χρησιμοποιείς τις βιβλιοθήκες της C++ με τη σημερινή τους μορφή, όχι αυτή που είχαν πριν 10 χρόνια και πριν βγουν τα κατάλληλα standards. Αν θέλεις απλά να ξεμπερδεύεις, τότε θα πρέπει να διαβάσεις για interop.

    Όσον αφορά το COM+ forum, το COM+ είναι μία τεχνολογία καθαρά distributed transaction processing η οποία ατυχώς ονομάστηκε έτσι. Τον καιρό των NT 4 το προϊόν αυτό το λέγανε Microsoft Transaction Server. Όπως θα πρόσεξες, έχει λίγα posts και το διαβάζουν ελάχιστοι, καθώς ελάχιστοι καταλαβαίνουν τί είναι, τί κάνει και γιατί χρησιμεύει - σε μεγάλο βαθμό και εξαιτίας του ονόματος. Σήμερα αυτή η τεχνολογία έχει εξελιχθεί στο WCF.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  23-01-2008, 11:55 39488 σε απάντηση της 38650

    Απ: Expose .NET User control as COM and embed it to a visual c++ 6.0 application

    Σε συνέχεια του προβλήματος που έθεσα (Expose .NET User control  as COM and embed it to a visual c++ 6.0 application) αναφέρω κάποια βήματα που
    έγιναν προς αυτή την κατεύθυνση μήπως με την συζήτηση προκύψει κάποια λύση.

    Δεδομένα διαδικασίας.

        Αναπτύχθηκε ένα .NET user control και έγινε exposed ως ActiveX control. Το προιόν αυτής της διαδικασίας είναι ένα σύνολο από dll αρχεία. Για να μπορεί να χρησιμοποιηθεί το ActiveX control, τα αρχεία αυτά εισάγονται στην global assembly cache και έπειτα στην registry. Κατά το τελευταίο βήμα είναι δυνατόν να προκύψει η typed library που αντιστοιχεί στο control. Η typed library φαίνεται από το OLE/COM Viewer της Microsoft. Η συγκεκριμένη διαδικασία πραγματοποιείται επιτυχώς καθότι στο registry υπάρχει το ActiveX control.

    Ενσωμάτωση του ActiveX control στο VS 6.

    Για     Για την ενσωμάτωση του control σε ένα Dialog μίας multi dialog mfc εφαρμογής γραμμένης σε C++ πρέπει να επιλεγή το ActiveX control από τα εγκατεστημένα στην registry controls και να εισαχθεί στην Dialog form. Το πρόβλημα είναι ότι το VS 6 δεν βλέπει το control ως Registered ActiveX Control. (Επιλογή: Project->Add To Project-> Components and Contrrol-> Registered ActiveX Controls στον folder Gallery).

    Ευχαριστώ εκ των προτέρων για οποιαδήποτε βοήθεια
    ΣΠΑΗΣ ΗΛΙΑΣ

    Ey




  •  23-01-2008, 14:08 39497 σε απάντηση της 39488

    Απ: Expose .NET User control as COM and embed it to a visual c++ 6.0 application

    Regasm έτρεξες για να κάνεις register το control? Άν δεν το κάνεις αυτό δεν πρόκειται να μπουν οι κατάλληλες εγγραφές στο registry. Ίσως θα έπρεπε να ξεκινήσεις με κάποια από τα Quickstarts και τα Tutorial του MSDN, τα οποία βρίσκονται και online στο http://msdn.microsoft.com αλλά εγκαθίστανται και στο μηχάνημα όπου έχεις βάλει το Visual Studio .NET. Για παράδειγμα, υπάρχει ολόκληρο κεφάλαιο, το Exposing .NET  Framework Components to COM που περιγράφει τί πρέπει να γίνει καθώς και πολλά samples.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems