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

 

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

CreateObject and C#

Îåêßíçóå áðü ôï ìÝëïò thanosk. Τελευταία δημοσίευση από το μέλος thanosk στις 18-02-2011, 18:45. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  18-02-2011, 16:15 63398

    CreateObject and C#

    Καλησπέρα σε όλους.

    Προσπαθώ να ξεκινήσω να μάθω C# και μπήκα μάλλον κατευθείαν στα βαθεία Stick out tongue
    Θα ήθελα  την βοήθεια σας σχετικά με το CreateObject στην C#

    Στην VB.NET (WinForm) είχα τον παρακάτω κώδικα

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Private Sub Login()

    Dim SessionID as String
    Dim ExtSessionID as String
    Dim strTCPIP as String
    Dim OServer as Object
    Dim OLogin as Boolean
    Dim xUsername as String
    Dim xPassword as String
    Dim OResult as Long
    Dim xSuccess as Long=-1

    If Not OLogin Then

    OServer=CreateObkect("Request")
    OResult=OServer.GetSessionIDs(strTCPIP, xUsername, xPassword, SessionID, ExtSessionID)

    If OResult<>xSuccess Then

    "Problem"

    Else

    "True"

    End If

    End If

    End Sub

    Το Request είναι dll που βρίσκεται τοπικά στο pc.
    Το παραπάνω κάνει login σε ένα εξωτερικό server για να πάρω στοιχεία και δουλεύει μια χαρά στην VB.NET.
    Το θέμα είναι ότι προσπαθώ κάτι ανάλογο να κάνω και στην C# αλλά δεν ξέρω πώς μπορώ να το κάνω!!!


    Δημοσίευση στην κατηγορία:
  •  18-02-2011, 16:59 63400 σε απάντηση της 63398

    Απ: CreateObject and C#

    Η CreateObject κρύβει από πίσω της την Activator.CreateInstance. Στο .NET δεν υπάρχουν μέθοδοι χωρίς κλάσεις. Η CreateObject είναι ουσιαστικά ένας wrapper στο Activator.CreateInstance(Type.GetTypeFromProgID("My.ProgID)) και Activator.CreateInstance(Type.GetTypeFromCLSID("My.CLSID)) για λόγους backwards compatibility.

    Επειδή η C# είναι statically typed γλώσσα δεν μπορείς απλά να δημιουργήσεις ένα αντικείμενο με την CreateInstance και να αρχίζεις να καλείς μεθόδους με myObject.SomeMethod() καθώς ο compiler θα ψάξει να βρει την SomMethod() στον τύπο Object - όπου δεν υπάρχει. Στην C# 4 θα πρέπει να ορίσεις τον τύπο του αντικειμένου ως dynamic για να συμπεριφερθεί όπως και στην VB. Πριν την C# 4 αυτό δεν γίνεται. Το κακό με το dynamic είναι ότι αν κάνεις κάποιο λάθος θα φανεί μόνο όταν τρέξει ο κώδικας. Αυτό το πρόβλημα όμως το έχεις και με την VB.

    Αντί να φτιάχνεις το αντικείμενο με το ProgID μπορείς να προσθέσεις ένα reference στη βιβλιοθήκη του όπως γίνεται και με τα .NET assemblies. Αυτό παίζει και με εκδόσεις πριν την C# 4, ενεργοποιεί το Intellisense και γίνεται και έλεγχος κατά το compile ότι δεν έγραψες τίποτε περίεργο.

     

     


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  18-02-2011, 17:30 63402 σε απάντηση της 63400

    Απ: CreateObject and C#

    Ευχαριστώ για την απάντηση.

    Σε γενικές γραμμές το κατάλαβα, μπορείς να μου βάλεις ένα μικρό παράδειγμα?


    Ευχαριστώ προκαταβολικά
  •  18-02-2011, 17:39 63403 σε απάντηση της 63402

    Απ: CreateObject and C#

    Για να σκανάρω χωρίς να προσθέσω reference στο Windows Image Acquisition Library μπορώ να γράψω

    dynamic wiaDialog = Activator.CreateInstance(Type.GetTypeFromProgID("WIA.CommonDialog"));           

    το οποίο είναι αντίστοιχο του

    Dim wiaDialog=CreateObject("WIA.CommonDialog");


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  18-02-2011, 18:45 63407 σε απάντηση της 63403

    Απ: CreateObject and C#

    Κατατοπιστικότατος Smile

    Ευχαριστώ
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems