Προς το περιεχόμενο

COM vs dll


Evgenios1

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια, ποια η διαφορα του exporting με το κλασικο dll απο το να κανουμε export μεσου COM;

 

Υγ1: Κανα καλο tool για guid gen;

Υγ2: Κανα καλο tutorial για com+;

Δημοσ.
Γεια, ποια η διαφορα του exporting με το κλασικο dll απο το να κανουμε export μεσου COM;[..]

 

Οι ρουτίνες (τα αντικείμενα πιο σωστά) και οι μεταβλητές των COM DLL γίνονται export με πολύ συγκεκριμένο τρόπο - πρότυπο (COM Interface) τον οποίο έχει ορίσει αναλυτικά η Microsoft ώστε κάθε εφαρμογή να μπορεί να μαθαίνει για αυτές, την μορφή παραμέτρων που χρησιμοποιούν, την τιμή επιστροφής τους και ανεξαρτήτως της γλώσσας προγραμματισμού μεταξύ εφαρμογής και COM να επιτυγχάνεται άνετη (ok, όχι πάντα - τις περισσότερες φορές :-D) επικοινωνία μεταξύ τους.

 

Αντίθετα το export των DLL δεν υλοποιεί κάποιο συγκεκριμένο τρόπο – πρότυπο (Interface) ώστε να είναι εύκολη η εύρεση των διαθέσιμων ρουτινών, η μορφή των παραμέτρων τους και ο τύπος της επιστρεφόμενης τιμής τους. Επίσης δεν είναι σίγουρο ότι οι τύποι που χρησιμοποιούν οι ρουτίνες της DLL υποστηρίζονται πάντοτε από το προγραμματιστικό εργαλείο του χρήστη (ειδικά αν δεν υπάρχει το κατάλληλο αρχείο LIB/H). Το δε export αντικειμένων (class) σε απλές DLL είναι εξαιρετικά προβληματικό ως απαγορευτικό (λόγο name mangling) μεταξύ διαφορετικών compilers πράμα που λύνεται άνετα από το COM.

 

Το μειονέκτημα των COM είναι ο περίπλοκος τρόπος κατασκευής τους (αν και απλοποιείται ως έναν βαθμό από τα σύγχρονα εργαλεία ανάπτυξης) σε αντίθεση με τις απλές DLL.

Δημοσ.

Το μειονέκτημα των COM είναι ο περίπλοκος τρόπος κατασκευής τους (αν και απλοποιείται ως έναν βαθμό από τα σύγχρονα εργαλεία ανάπτυξης) σε αντίθεση με τις απλές DLL.

 

Ευχαριστω :-).

Ειναι πραγματι παλουκι :mad:

Δημοσ.
Υγ1: Κανα καλο tool για guid gen;

 

Evgenios1 μήπως χρησιμοποιείς visual studio; Αν ναι τότε πήγαινε στην επιλογή Tools -> Create GUID. Τώρα πόσο καλό είναι δεν έχω ιδέα.

Δημοσ.
Evgenios1 μήπως χρησιμοποιείς visual studio; Αν ναι τότε πήγαινε στην επιλογή Tools -> Create GUID. Τώρα πόσο καλό είναι δεν έχω ιδέα.

 

Εχω κατεβασει καμια 10ρια ενω το εχω μπροστα στα ματια μου B). Thx

 

 

Λοιπων, καταφερα να φτιαξω ενα com (ετσι νομιζω). Το προβλημα μου ειναι οτι οταν παω να το "εισαγω" σε ενα απλο project της c#, μου λεει οτι δεν ειναι com ! :shock:

 

Το com που εκανα ειναι το παρακατω

cpm_3.zip

Δεν εχω υλοποιησει τις συναρτησεις για registry

Και το interface

>#pragma once
#include "stdafx.h"


extern ULONG g_ObjInUse;

class Alert
: public IAlert
{
ULONG refcount;
public:
Alert();
~Alert();

HRESULT WINAPI DoAlert();

HRESULT WINAPI QueryInterface( REFIID  ,  void **);
   ULONG   WINAPI AddRef();
   ULONG   WINAPI Release();
};

 

Απορια 1) Δε πρεπει και καλα το release ναι ειναι *.ocx ;

Απορια 2) Πως θα καταλαβω αν ειναι COM και οχι μια "απλη" dll;

Συμπερασμα: Αυτη η τεχνολογια ειναι ΠΑΛΟΥΚΙ.

Δημοσ.
Εχω κατεβασει καμια 10ρια ενω το εχω μπροστα στα ματια μου B). Thx

 

 

Λοιπων, καταφερα να φτιαξω ενα com (ετσι νομιζω). Το προβλημα μου ειναι οτι οταν παω να το "εισαγω" σε ενα απλο project της c#, μου λεει οτι δεν ειναι com ! :shock:

 

Το com που εκανα ειναι το παρακατω

[ATTACH]31819[/ATTACH]

Δεν εχω υλοποιησει τις συναρτησεις για registry

Και το interface

>#pragma once
#include "stdafx.h"


extern ULONG g_ObjInUse;

class Alert
: public IAlert
{
ULONG refcount;
public:
Alert();
~Alert();

HRESULT WINAPI DoAlert();

HRESULT WINAPI QueryInterface( REFIID  ,  void **);
   ULONG   WINAPI AddRef();
   ULONG   WINAPI Release();
};

 

Απορια 1) Δε πρεπει και καλα το release ναι ειναι *.ocx ;

Απορια 2) Πως θα καταλαβω αν ειναι COM και οχι μια "απλη" dll;

Συμπερασμα: Αυτη η τεχνολογια ειναι ΠΑΛΟΥΚΙ.

 

Καταρχάς καλο είνα να διαβάσεις κάποιο βιβλίο για την τεχνολογία COM. Το αντικείμενο που έφτιαξες δεν πληρεί τις προϋποθέσεις για να γίνει ένα COM object. Όλα τα com objects πρέπει να κληρονομούν από IUnknown interface και να υλοποιούν τις μεθόδους του.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...