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

 

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

Χρήση .lib αρχείου σε C#

Îåêßíçóå áðü ôï ìÝëïò M1ke. Τελευταία δημοσίευση από το μέλος M1ke στις 25-10-2008, 13:40. Υπάρχουν 8 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  22-10-2008, 19:17 45677

    Χρήση .lib αρχείου σε C#

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

    Το ακόλουθο post βρίσκεται εδώ λόγω κακού documentation και πολύ κακού support!

    Πρέπει να χρησιμοποιήσω κάποιες συναρτήσεις που περιγράφονται σε ένα .h αρχείο. Έχω επίσης στη διάθεσή μου ένα .lib και ένα .dll αρχείο.

    Το .dll δεν έχει κάποια exported functions για να τις κάνω κατευθείαν P/Invoke στη C#.

    Υπάρχει τρόπος να πάρω κάπως τις συναρτήσεις αυτές από το lib αρχείο και να τις χρησιμοποιήσω σε C#?

    Ευχαριστώ!


    I think there's to much blood in my caffeine system..
  •  22-10-2008, 19:29 45678 σε απάντηση της 45677

    Απ: Χρήση .lib αρχείου σε C#

    Άμεσα, όχι δεν μπορείς να το κάνεις.. αλλα μπορείς να φτιάξεις ένα proxy dll το οποίο κάνει μονο export τις function απο το Lib ώστε να φαίνονται στην C#. Σε διαφορετική περίπτωση, εάν έχεις source code ring again και θα σου πούμε.


    Παναγιώτης Κεφαλίδης

    "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
  •  23-10-2008, 00:10 45683 σε απάντηση της 45678

    Απ: Χρήση .lib αρχείου σε C#

    Βασικά αυτά τα 3 αυτά αρχεία ήρθαν στη δουλειά με μία ζυγιστική μηχανή Stick out tongue, που επικοινωνεί με pc μέσω tcp. Το όλο θέμα είναι να ανοίξουμε σε c# τα αρχεία που ανταλλάσουν μεταξύ τους και λόγω ενός αρκετά περίεργου (εως ακαταλαβίστικου) formatting που έχουν χρειαζόμαστε τις συναρτήσεις αυτές. Οπότε το .h αρχείο έχει μερικές "απλές" δηλώσεις συναρτήσεων (πχ void* s_open(char* filename)) για τον χειρισμό τους.

    Όταν άνοιξα το .lib το visual studio έδειχνε δίπλα στα κατεβατά 16κων και τα αντίστοιχα ascii, οπότε και βρήκα ότι πχ το s_open "υπάρχει" στο lib..

    Όσο για το dll, προσπάθησα με DllImport αλλά δεν έβρισκε entry points.. Μετά το άνοιξα με ένα προγραμματάκι (κλασσικά εκ του google - 1 hit) , νομίζω λεγόταν dll Exporter. Δεν βρήκε exported functions..

    Επίσης όταν δοκίμασα να φτιάξω ένα c++ πρόγραμμα που να καλεί τις συναρτήσεις, δεν μπορούσε να κάνει link (σορρυ αλλά τόσες ώρες μετά δεν θυμάμαι το error, θα το δω και θα το προσθέσω) με το .lib.

    Όσο για τον κώδικα πρέπει να ρωτήσω τους "αποπάνω".. Μην έχουμε και προβλήματα! Πάντως τα αρχεία αυτά φτιάχτηκαν το 93-95 και γενικότερα η κατασκευάστρια εταιρία (γερμανική) έχει πολύ κλειστή τακτική. Ούτε downloads για API, ούτε online programming manual ούτε τίποτα!

    Γενικά απ' ότι έψαξα πρέπει να κάνω ένα wrapper. Το θέμα είναι ότι δεν ξέρω πως. Και η τελευταία επαφή μου με c / c++ ήταν πριν 1 χρόνο και αυτό σε linux (οπότε τα c++ configs του vs δεν μου λένε τίποτα!)

    I think there's to much blood in my caffeine system..
  •  23-10-2008, 00:43 45684 σε απάντηση της 45683

    Απ: Χρήση .lib αρχείου σε C#

    Τον wrapper θα είναι ευκολότερο να τον φτιάξεις με Managed C++ η οποία καταλαβαίνει από header files και libs. Το μόνο που φοβάμαι είναι μήπως το lib είναι σε κανένα άσχετο format το οποίο δεν μπορεί να το διαβάσει πλέον το Visual Studio. Τον παλιό καλό καιρό άλλο binary format χρησιμοποιούσε η Microsoft και άλλο η Borland. Να μην πούμε ότι τότε υπήρχαν και βιβλιοθήκες .......... 16 bit. Οπόε αν σου έδωσαν βιβλιοθήκη 16 bit .................. Ίσως να μπορείς να κάνεις κάποια μετατροπή με το LIB αλλά δεν το έχω χρησιμοποιήσει ποτέ για κάτι τέτοιο.

    Όσον αφορά τα settings, τα lib τα βάζεις είτε στο Project Properties > Linker >General >Additional Library Directories, είτε ένα-ένα στο Project Properties > Linker >Input > Additional Dependencies.


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

    Απ: Χρήση .lib αρχείου σε C#

    Για τα 16bit μου είπαν και στη δουλειά. Ελπίζω να μην έχουμε τέτοια! Αν και μάλλον θα επικοινωνήσουμε με την εταιρία (γιατί με τους έλληνες αντιπροσώπους της δεν βγάλαμε άκρη) και ελπίζω να έχουμε καλύτερα (πιο managed)  νέα!

    Σας ευχαριστώ πολύ για τις απαντήσεις σας! Θα λείπω για 1 μέρα, οπότε θα στείλω τα νεότερα την Παρασκευή!

    I think there's to much blood in my caffeine system..
  •  23-10-2008, 08:24 45687 σε απάντηση της 45685

    Απ: Χρήση .lib αρχείου σε C#

    Αν τα αρχεία ξεπέφτανε σε κανένα attachment ή skydrive θα μπορούσαμε να τα δούμε και να βγάλουμε άκρη. Να θυμηθούμε και τα νιάτα μας!


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  25-10-2008, 10:07 45732 σε απάντηση της 45687

    Απ: Χρήση .lib αρχείου σε C#

    Τελικά ήρθε στα χέρια μας το source code.. Ansi C... Τελικά το ακαταλαβίστικο formatting είναι τα δεδομένα γραμμένα byte-byte. Άντε να το κάνεις convert σε c# τώρα! (Ψάχνωντας παράλληλα για το πόσα bytes εννοεί αυτός με κάθε τύπο δεδομένων και πόσα εννοεί η c#).

    Τελικά μου είπαν να μην βγάλω οτιδήποτε έξω από την εταιρία... Ευχαριστώ πολύ που προσφερθήκατε! Big Smile

    I think there's to much blood in my caffeine system..
  •  25-10-2008, 11:02 45735 σε απάντηση της 45732

    Απ: Χρήση .lib αρχείου σε C#

    Δεν νομίζω ότι καταλαβαίνω τί εννοείς! Τα δεδομένα ... μέσα στο binary φυσικά και θα είναι byte-byte. Αυτό δεν σημαίνει ότι έχει πρόβλημα το lib ή το dll. Τελικά δεν μας είπες αν υπήρχε πρόβλημα στο linking.

    Το ότι το αρχείο είναι ANSI C (ποιό standard όμως?) δεν είναι κακό και δεν απαιτεί μετατροπή σε C#. Απλά φτιάχνεις ένα class library σε Managed C++ με αυτό ακριβώς τον κώδικα, απλά προσθέτεις και τις μεθόδους που θέλεις να καλείς εσύ από τη C# χωρίς Dll import.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  25-10-2008, 13:40 45738 σε απάντηση της 45735

    Απ: Χρήση .lib αρχείου σε C#

    Βασικά δεν κατάφερα να το κάνω link.. Δοκίμασα και με visual studio και με το dev-c++ αλλά δεν! Μιλήσαμε και με άλλον έναν που το είχε δουλέψει παλιότερα και τελικά και αυτός είχε καταλήξει να πάρει τον κώδικα και να τον αλλάξει..

    Και για να το κάνω πιο σαφές: Η όλη δουλειά γίνεται για να επικοινωνήσει ο υπολογιστής με μία συσκευή. Μεταξύ τους ανταλλάσουν αρχεία με συγκεκριμένο format (εκεί χρειαζόταν ο κώδικας). Τελικά τα αρχεία αυτά έχουν έναν στάνταρ header που περιγράφει την δομή και τα πραγματικά δεδομένα είναι γραμμένα byte-byte στο αρχείο (όχι χωρισμένα με tabs, γραμμές ή όπως αλλιώς θα περίμενε κανείς).

    Οπότε τώρα πρέπει να πάρω την λογική από τον κώδικα σε C και να τον κάνω σε C#. Δυστυχώς θα γίνει έτσι εφόσον ο κώδικας "στόχευε" 16bit, οπότε όλες οι μεταβλητές αναφέρονται στα τότε standards, και δεν μπορεί να γίνει compile από "σύγχρονο" C Compiler ώστε να τον κάνω εγώ import. Θα ακολουθήσω τις οδηγίες του manual για το τι περιμένει να δει η συσκευή (3 bytes εδώ, 2 μετά κοκ) και θα πράξω αναλόγως... Sad Απλα και στη δουλειά είπαμε ότι είναι καλύτερο να γίνει η μετατροπή τώρα που είναι νωρίς και να είναι readable ο κώδικας παρά να μπαλώνουμε 15 χρονών "τρύπες" για να γίνει η δουλειά πιο γρήγορα..
    I think there's to much blood in my caffeine system..
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems