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

 

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

Χρήση κώδικα C για δημιουργία dll σε Visual Studio project/solution

Îåêßíçóå áðü ôï ìÝëïò tasos. Τελευταία δημοσίευση από το μέλος PALLADIN στις 20-11-2006, 15:16. Υπάρχουν 10 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  13-11-2006, 16:48 20287

    Χρήση κώδικα C για δημιουργία dll σε Visual Studio project/solution

    Έχω κάποια αρχεία κώδικα σε C και θέλω με αυτά να χρησιμοποιήσω ένα dll έτσι ώστε να τρέξω τις C συναρτήσεις μέσα από Vb .NET.

    Έχω ένα solution με δύο projects. Το ένα είναι το κύριο project σε VB και στο δεύτερο προσπαθώ να δημιουργήσω ένα dll με τον C κώδικα που προανέφερα. Η αρχική σκέψη ήταν να δημιουργήσω ένα C++ Class Library και να ενσωματώσω εκεί το C κώδικα, αλλά όταν το έκανα και έκανα build project έβγαινε το εξής λάθος: "fatal error C1010: unexpected end of file while looking for precompiled header directive" για κάθε αρχείο με κώδικα C.
    Δοκίμασα να αλλάξω την κατάληξη των αρχείων σε .cpp από .c αλλά πάλι είχε το ίδιο λάθς. Γυρνώντας σε .cpp τις καταλήξεις έβαλα λοιπόν στην αρχή του κάθε αρχείου την εξής δήλωση "#include "stdafx.h"". Στην περίπτωση αυτή έχω το εξής μήνυμα: "ΤestLibrary error LNK2020: unresolved token (0A00001F) _iob".
    Δεν μπορώ να καταλάβω τι πρέπει να κάνω για να λυθεί το πρόβλημα, ή αν κάνω κάτι λάθος εγώ.

    Μια τελευταία παρατήρηση είναι ότι αν το project με τον C κώδικα οριστεί να δημιουργεί .exe, τότε στο compile δεν έχω λάθη και το πρόγραμμα εκτελείται κανονικά.
    Οποιαδήποτε βοήθεια είναι δεκτή, ευχαριστώ εκ των προτέρων.


    Τάσος Καραγιάννης

    Baby debugging steps...
  •  13-11-2006, 21:23 20295 σε απάντηση της 20287

    Απ: Χρήση κώδικα C για δημιουργία dll σε Visual Studio project/solution

    Δώσε περισσότερες πληροφορίες, γιατί πολλά εξαρτώνται από το περιεχόμενο των επίμαχων αρχείων. Μπορείς και να τα κάνεις post αν θέλεις.

    Νατάσα Μανουσοπούλου
  •  16-11-2006, 10:58 20445 σε απάντηση της 20287

    Απ: Χρήση κώδικα C για δημιουργία dll σε Visual Studio project/solution

    Λοιπόν, αυτό που κατάλαβα είναι ότι έτσι όπως είναι γραμμένος ο κώδικας (C από εποχή 95) μπορεί να μεταγλωτιστεί σε Win32 πλατφόρμα αλλά όχι σε .NET πλατφόρμα. Είναι 4 αρχεία για external sorting (sorting ενός αρχείου).

    Παραθέτω τα links:

    http://alumnus.caltech.edu/~pje/mergesor.html (3 αρχεία, το 1 έχει main)

    http://alumnus.caltech.edu/~pje/llmsort.html (1 αρχείο)

    νομίζω πάντως το πρόβλημα είναι ότι ο compiler δεν αφήνει εντολές τύπου

    p++; στην περίπτωση που ο p είναι δείκτης. Υπενθυμίζω πως μιλάμε για την

    .NET πλατφόρμα και όχι για την Win32.
    Τάσος Καραγιάννης

    Baby debugging steps...
  •  16-11-2006, 12:26 20450 σε απάντηση της 20445

    Απ: Χρήση κώδικα C για δημιουργία dll σε Visual Studio project/solution

    Καλησπέρα φιλε Τάσο,

    Ο καλύτερος τρόπος είναι να χρησιμοποιήσεις C++/CLI.

    Δηλαδή θα χρειαστούμε Visual C++ 2005 (και η express edition μας κάνει)

    θα ξεκινήσεις φτιάχνοντας ένα Visual C++ CLR/Class Library

    και από εκεί θα έχεις ένα managed class (ref στον κόσμο της C++/CLI)

    που θα τον χρησιμοποιείς ως wrapper για τις κλείσεις από τον VΒ.NET κώδικα προς τον native C κώδικα.

    Εγώ αυτήν την τεχνική ακόλουθω και έχω μεταφέρει KLOC που είχα σε gcc

    και σε VC++ 6 MFC.
    Palladinos Nick
    Software Engineer
    -----------------------
    The limits of my language mean the limits of my world. (Ludwig Wittgenstein)
  •  16-11-2006, 12:35 20451 σε απάντηση της 20287

    Απ: Χρήση κώδικα C για δημιουργία dll σε Visual Studio project/solution

    Ευχαριστώ palladin για την ιδέα. Έχω το VS.NET 2005 αλλά αυτή τη στιγμή χρησιμοποιώ το 2003. Υπάρχουν διαφορές όσο αφορά τη VB.NET και τη C# ή όλα θα τρέξουν οκ αν πάω στην έκδοση 2005;

    Στο project μου έχω VB και C#.
    Τάσος Καραγιάννης

    Baby debugging steps...
  •  16-11-2006, 12:49 20453 σε απάντηση της 20450

    Απ: Χρήση κώδικα C για δημιουργία dll σε Visual Studio project/solution

    Δεν νομίζω να υπάρχει κάποιο πρόβλημα όσον αφορά τον VB.net και C# κώδικα.

    Το δυνατό σημείο του θέματος είναι ότι η C++/CLI παράγει ένα assembly με MSIL και native(x86) κώδικα (Η C++/CLI είναι η μονη γλώσσα στο .Net που μπορεί να το κάνει αυτό).

    Εγώ κάνω add project reference το C++/CLI class library από τον C# client μου και κάνω cross-debugging σε native και managed κώδικα ταυτόχρονα. Είναι απόλαυση :).

    Happy Coding
    Palladinos Nick
    Software Engineer
    -----------------------
    The limits of my language mean the limits of my world. (Ludwig Wittgenstein)
  •  20-11-2006, 14:26 20739 σε απάντηση της 20453

    Απ: Χρήση κώδικα C για δημιουργία dll σε Visual Studio project/solution

    Καλησπέρα,

    Πήγα στην 2005 του .NET και ακολούθησα τις οδηγίες που έδωσε ο palladin αλλά πάλι έχω ένα μήνυμα στο οποίο μου λέει ότι δεν μπορεί να κάνει compile το C αρχείο με την /crl εντολή. Αν στα properties κάνω τις αλλαγές που προτείνει το documentation

    (C/C++ --> Advanced -->Compile As) και επιλέγω C++ αρχείο και εισάγω τη γραμμή #include "stdafx.h" πάλι έχω τα ίδια μηνύματα λάθους για τα ίδια σημεία κώδικα!! Πρέπει να γίνει κάτι άλλο;


    Τάσος Καραγιάννης

    Baby debugging steps...
  •  20-11-2006, 14:56 20743 σε απάντηση της 20739

    Απ: Χρήση κώδικα C για δημιουργία dll σε Visual Studio project/solution

    Συνημμένα: Sort.zip

    Καλησπέρα Τάσο,

    Κατέβασα τον C κώδικα από τα link που μας έδωσες και έφτιαξα ένα C++/CLR Class library...

     

    Μου κάνει compile κανονικά και σου το έχω attach για να πειραματιστείς


    Palladinos Nick
    Software Engineer
    -----------------------
    The limits of my language mean the limits of my world. (Ludwig Wittgenstein)
  •  20-11-2006, 15:05 20744 σε απάντηση της 20287

    Απ: Χρήση κώδικα C για δημιουργία dll σε Visual Studio project/solution

    Φίλε palladin, πραγματικά σε ευχαριστώ για τον κόπο σου, αλλά εσύ έκανες το ένα από τα τέσσερα συνολικά αρχεία που θέλω. Τα δύο links που έδωσα δεν αφορούν δύο εκδόσεις του ίδιου πράγματος αλλά πρακτικά είναι το ένα project και τα τέσσερα. Μάλλον βρήκα κάποια άκρη και έχω προχωρήσει. Δεν έχω πλέον λάθη και μάλλον θα τρέξει σε λίγο. Θα κάνω post αν χρειαστώ κάτι ή θα κλείσω την ενότητα άμα όλα ειναι τελικά ok!

    Ευχαριστώ πάντως για τον κόπο σου!
    Τάσος Καραγιάννης

    Baby debugging steps...
  •  20-11-2006, 15:11 20747 σε απάντηση της 20744

    Απ: Χρήση κώδικα C για δημιουργία dll σε Visual Studio project/solution

    Και λοιπόν, αλήθεια είναι ότι όλα έτρεξαν οκ! Τελικά μάλλον εγώ ήμουν ανυπόμονος και βιάστηκα να κάνω post. Για την αλήθεια του πράγματος, υπήρχε το εξής πρόβλημα:

    static int compare(void *p, void *q, void *pointer)

    {

    unsigned i = 0;

    #define pp ((char *) p)

    #define qq ((char *) q)

    for (i = 0; i <= last_column; i++)

    {

    if (i >= first_column)

    {

    int n = *pp - *qq;

    if (n != 0)

    return n;

    }

    if (*pp == 0 && *qq == 0)

    return 0;

    if (*pp != 0)

    pp++;

    if (*qq != 0)

    qq++;

    }

    return 0;

    }

    Είχε πρόβλημα με την εντολή pp++; και qq++; έκανα τις εξής αλλαγές και έτρεξε:

    static int compare(void *p, void *q, void *pointer)

    {

    unsigned i = 0;

    char *pp, *qq;

    pp = (char *)p;

    qq = (char *)q;

    // #define pp ((unsigned char *) p)

    // #define qq ((unsigned char *) q)

    for (i = 0; i <= last_column; i++)

    {

    if (i >= first_column)

    {

    int n = *pp - *qq;

    if (n != 0)

    return n;

    }

    if (*pp == 0 && *qq == 0)

    return 0;

    if (*pp != 0)

    pp++;

    if (*qq != 0)

    qq++;

    }

    return 0;

    }

    Το παραθέτω απλά αν κάποιος έχει το ίδιο κόλλημα να ξέρει τι να κάνει.
    Τάσος Καραγιάννης

    Baby debugging steps...
  •  20-11-2006, 15:16 20750 σε απάντηση της 20747

    Απ: Χρήση κώδικα C για δημιουργία dll σε Visual Studio project/solution

    Ναι αν ο κώδικας είναι σε C και έχει αρκετά χρονάκια στην πλάτη του, ίσως χρειάζονται κάποιες αλλαγές στο να γίνει compile από τους C++ compilers.

    Happy Coding
    Palladinos Nick
    Software Engineer
    -----------------------
    The limits of my language mean the limits of my world. (Ludwig Wittgenstein)
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems