Giorgos3924 Δημοσ. 10 Ιουλίου 2014 Δημοσ. 10 Ιουλίου 2014 Έχω ένα απλό προγραμματάκι σε C και θέλω να προσθέσω γραφικό περιβάλλον. Και επειδή μ αρέσει η C# ψάχνω ένα τρόπο να συνδυάσω αυτά τα 2 προγράμματα. Πώς μπορώ με ένα Project της Visual C# να ελέγχω ένα πρόγραμμα C; Το μόνο που θέλω είναι να στέλνω κάποια data και ανάλογα τα data που θα παίρνει, θα λαμβάνει οδηγίες για το τί θα κάνει. Άρα θα μπορεί να εκτελεί συναρτήσεις. Το μόνο που μπορώ να σκεφτώ είναι με txt αρχείο. Πχ, το button1 γράφει μια λέξη στο αρχείο, το άλλο πρόγραμμα διαβάζει και καταλαβαίνει ότι πατήθηκε το button1. Τί άλλο μπορώ να κάνω;
albNik Δημοσ. 10 Ιουλίου 2014 Δημοσ. 10 Ιουλίου 2014 Αν βαριεσαι να το μετατρεψεις όλο σε C# υπαρχει και το platform invoke όπου καλεις τις extern συναρτησεις τις C μεσα απο C# http://msdn.microsoft.com/en-us/library/aa288468(v=vs.71).aspx
warchief Δημοσ. 10 Ιουλίου 2014 Δημοσ. 10 Ιουλίου 2014 Υπαρχουν διαφοροι τρόποι να κάνεις αυτο που θέλεις. Υποθέτω οτι εχεις τον κώδικα για το C προγραμματάκι. Ενας απο τους σωστούς τρόπους για να γίνει ειναι να μετατρέψεις το προγραμματάκι σε βιβλιοθήκη και να παράγεις .NET assembly ώστε να πάρεις ενα managed library (/clr switch). Μετά απλά προσθέτεις την βιβλιοθήκη αυτη στα library dependencies του C# project σου. [Ενας άλλος τροπος οπως ειπε και ο albNik ειναι να το κάνεις native βιβλιοθήκη και να χρησιμοποιήσεις pInvoke]
Giorgos3924 Δημοσ. 10 Ιουλίου 2014 Μέλος Δημοσ. 10 Ιουλίου 2014 Αν βαριεσαι να το μετατρεψεις όλο σε C# υπαρχει και το platform invoke όπου καλεις τις extern συναρτησεις τις C μεσα απο C# http://msdn.microsoft.com/en-us/library/aa288468(v=vs.71).aspx Βασικά έχει κάποια header file και κάποια dll. τώρα είδα ότι υπάρχει example σε C#, το κατέβασα και προσπαθώ να κάνω Import τα dll αλλά δεν... http://www.ftdichip.com/Support/SoftwareExamples/FTDIChip-ID.htm μου βγάζει αυτό το σφάλμα όπως λένε κ εδώ: http://stackoverflow.com/questions/7080447/i-want-a-solution-for-this-please-make-sure-that-the-file-is-accessible-and-th Προσπαθώ να κάνω [DllImport("FTChipID.dll")] αλλά τώρα μου βγάζει error σε ένα namespace Error 1 The type or namespace name 'FTChipID' could not be found (are you missing a using directive or an assembly reference?) Με τη C ήταν πιο εύκολο, include ότι χρειάζεσαι, πετάς όλα τα dll και τα header file στο project path και τρέχει. Και μετά έχεις όλο το χρόνο να ασχοληθείς με το πρόγραμμα. --------- Εγώ είχα πάρει το console application που έχει στα example, έβαλα ότι dll και header file ήθελε και έφτιαξα κάτι απλό με 2-3 συναρτήσεις.
albNik Δημοσ. 10 Ιουλίου 2014 Δημοσ. 10 Ιουλίου 2014 Δεν γινεται add reference διοτι δεν ειναι .ΝΕΤ dll ή COM. Απλα βαλτο διπλα το C# exe.
Giorgos3924 Δημοσ. 10 Ιουλίου 2014 Μέλος Δημοσ. 10 Ιουλίου 2014 Το using namespace FTChipID είναι namespace της dll? Το έλυσα αυτό με το error, αλλά κολάει πάλι σε ένα σημείο. δεν δουλεύει, οπότε πρέπει να το κάνω με 2 προγράμματα. Μου είναι και πιο εύκολο
albNik Δημοσ. 10 Ιουλίου 2014 Δημοσ. 10 Ιουλίου 2014 Το BadImageFormatException κατα 99% σημαίνει μη συμβατότητα 32-64-bit. Πρεπει να φτιαξεις ενα dll για 32-bit και ενα για 64-bit.
Giorgos3924 Δημοσ. 11 Ιουλίου 2014 Μέλος Δημοσ. 11 Ιουλίου 2014 Δεν κατάλαβα τι εννοείς :-\ Να έχω 2 dll στο project? 32 και 64 ? Άμα το κάνω 2 ξεχωριστά προγράμματα και κάνω επικοινωνία μέσω dll?
Giorgos3924 Δημοσ. 11 Ιουλίου 2014 Μέλος Δημοσ. 11 Ιουλίου 2014 Μήπως το πρόγραμμα είναι 64bit και προσπαθεί να χειριστεί dll 32bit? δεν υπάρχει άλλο dll Μόνο αυτό έχω :/
albNik Δημοσ. 11 Ιουλίου 2014 Δημοσ. 11 Ιουλίου 2014 To C# exe θα το κανεις build μονο μια φορα με AnyCPU configuration. Ενώ το C dll θα το κανεις build 2 φορες ( x86 και x64). Σε Windows 32 θα βαζεις το exe με το x86 dll και σε Windows 64 θα βαζεις το exe και το x64 dll. Τα dll θα πρεπει να εχουν το ιδιο όνομα , αυτο που βαζεις στο DllImport()
Giorgos3924 Δημοσ. 11 Ιουλίου 2014 Μέλος Δημοσ. 11 Ιουλίου 2014 Βασικά γίνεται ήδη build με AnyCPU configuration. Το dll το έχω δίπλα στο exe, χωρίς dllimport όταν κάνω dllimport παίρνω ερορ The DllImport attribute must be specified on a method marked 'static' and 'extern' παρόλο που η main που χρησιμοποιεί της συναρτήσεις της dll είναι static χωρίς dllimport το πρόγραμμα σταματάει στην πρωτη συναρτηση της dll όπως την εικόνα που ποσταρα Μήπως παίζει κάτι άλλο; Γιατί το example που προσπαθώ να τρέξω έχει φτιαχτεί για να χρησιμοποιεί 2-3 συγκεκριμένες dll
albNik Δημοσ. 11 Ιουλίου 2014 Δημοσ. 11 Ιουλίου 2014 Χρειαζεται να κανεις add reference το FTChipNet.dll το οποιο ειναι .ΝΕΤ dll, και να υπαρχει διπλα του το FTChipId.dll (32-64 αναλογα τα windows). Τα DllImport υπαρχουν στο FTChipNet.dll, και δεν χρειαζεται να φτιάξεις. Υπαρχουν τα δυο version του FTChipId.dll? Βαλε σε ενα φακελο : exe, FTChipNet.dll και το αντίστοιχο FTChipId.dll και τρεξε to exe.
Giorgos3924 Δημοσ. 11 Ιουλίου 2014 Μέλος Δημοσ. 11 Ιουλίου 2014 Ναι ακριβώς αυτό κάνω.έκανα reference την FTChipNet και τα έχω βάλει και τα 2 φορά στο exe
albNik Δημοσ. 11 Ιουλίου 2014 Δημοσ. 11 Ιουλίου 2014 Τι Windows εχεις 32 ή 64? Θες και το αντιστοιχο FTChipId.dll να εχει διπλα στο exe. Τωρα το ειδα δεν υπάρχει άλλο dll Μόνο αυτό έχω :/
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα