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

 

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

Reference σε βιβλιοθήκη

Îåêßíçóå áðü ôï ìÝëïò geoneo. Τελευταία δημοσίευση από το μέλος geoneo στις 04-02-2012, 12:47. Υπάρχουν 21 απαντήσεις.
Σελίδα 1 από 2 (22 εγγραφές)   1 2 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  27-01-2012, 00:43 69030

    Reference σε βιβλιοθήκη

    Καλησπέρα στην κοινότητα….

    Αντιμετωπίζω το εξής πρόβλημα.

    Έχω αγοράσει ένα σταθμό για τον καιρό τον οποίο έχω εγκαταστήσει στο εξοχικό μου.

    Ο σταθμός έχει την δυνατότητα να δίνει πληροφορίες μέσω ενός data logger Ethernet  interface.

    Μαζί με τον σταθμό πήρα και ένα πρόγραμμα σε windows για να επικοινωνώ και να παρακολουθώ δεδομένα…

    Όλα έχουν στηθεί και δουλεύουν μια χαρά.

    Μάλιστα βρήκα και κάποιο κώδικα τον μετέτρεψα λίγο και έφτιαξα και σε asp.net μια εφαρμογή που κάποια απο τα δεδομένα από τον σταθμό φαίνονται στη σελίδα μου :

    http://geonik.homeip.net/home/default.aspx

    Στο κάτω μέρος της σελίδας.

    Τώρα ποιο είναι το πρόβλημα.

    Ο σταθμός μπορεί να δώσει απίστευτα δεδομένα και τη δυνατότητα να κάνεις διάφορες αναλύσεις πεβλέψεις κλπ

    Η εταιρία έχει γράψει μια βιβλιοθήκη με απειρες functions και μπορείς να την κατεβάσεις και να γράψεις την δική σου εφαρμογή.

    Σου δίνει και ένα παράδειγμα σε windows forms που το δοκίμασα και δουλεύει.

    Εγώ επιμένω να θέλω asp.net web application για τους γνωστούς λόγους.

    Προσπάθησα λοιπόν να ξεκινήσω δημιουργώντας μια asp.net εφαρμογή και να προσπαθήσω να κάνω κλήσεις στην βιβλιοθήκη.

    Θέλεις ότι έχω σκουριάσει γιατί έχω να πιάσω κάτι χρονάκια το visual studio,...... χτυπιέμαι δυό τρέις μέρες και δεν τα  έχω καταφέρει,

    φαίνεται ότι η dll έχει περίεργο κώδικα (ίσως unmanaged) και όταν προσπαθώ να κάνω add reference παίρνω το παρακάτω error :

    A reference to ‘c:\..........\vantagepro.dll’ could not be added. No type libraries were found in the component.

    Μετά από άπειρες προσπάθειες σκέφτηκα να δημιουργήσω μια class όπου δήλωσα τις functions της βιβλιοθήκης ως εξής:

     

    public static class VantageProDll

    {

    ……………..

    …………….

    [DllImport("VantagePro.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]

    public static extern Int16 GetOutsideHumidity_V();

     

    …………………

    }

     

    Και στον κώδικα της σελίδας έβαλα πχ

    ……

    OutsideHumidity = VantageProDll.GetOutsideHumidity_V();

    …….

     

    Έκανα compile το οποίο πέρασε και πήρα ρε run time το παρακάτω λάθος

    Unable to load DLL 'VantagePro.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

    Βέβαια η dll υπάρχει παντού και στο bin και έχει δικαιώματα ο IUSER και στο root toy web site και υπάρχουν και κανα δυό επιπλέον depedences dll αλλά τίποτα....

    Ευχαριστώ εκ των προτέρων για όποια ιδέα προκειμένου να προχωρήσω…..

    Γιώργος Νικολιδάκης

     

     

     

     

     

    ω
  •  27-01-2012, 16:34 69037 σε απάντηση της 69030

    Απ: Reference σε βιβλιοθήκη

    Θα βοήθαγε αν μπορούσα να δω κώδικα - ένα link από τον έτοιμο κώδικα που βρήκες στο Internet και έφτιαξες το web part για το DNN.

    Ακόμα θα βοήθαγε να δω το σταθμό - κάποιο link στο internet - που έχεις για να μπορέσω να δω την βιβλιοθήκη που περιγράφεις.

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  27-01-2012, 16:47 69038 σε απάντηση της 69030

    Απ: Reference σε βιβλιοθήκη

    Έχεις ήδη χρησιμοποιήσει δύο εντελώς διαφορετικούς τρόπους για να φορτώσεις την ίδια βιβλιοθήκη. Ο ένας είναι για COM βιβλιοθήκες και ο άλλος για Win32 DLL (δηλαδή με C interface).  Αν το DLL που έχεις είναι .NET assembly, κανένας από τους δύο τρόπους δεν μπορεί να δουλέψει.

    Καλό θα είναι να ρίξεις πρώτα μία ματιά στο Winforms sample για να δεις πως έχει προστεθεί το DLL και πως χρησιμοποιείται. Είναι .NET, COM ή απλό? Ο τρόπος που χρησιμοποιείται στο Winforms θα παίξει και στο ASP.NET. 

    Απ' όσα έχεις πει μάλλον δεν πρόκειται για COM. Αν υποθέσουμε ότι είναι Win32 DLL, θα πρέπει να βρίσκεται ή στο path ή σε κάποια από τα folder που κοιτάζει η εφαρμογή σου για DLLs για να φορτωθεί. Χονδρικά, μία dekstop εφαρμογή κοιτάζει πάντα το folder από το οποίο ξεκίνησε. Μία web εφαρμογή κοιτάζει το bin folder κάτω από το directory της.



    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  27-01-2012, 17:37 69041 σε απάντηση της 69030

    Απ: Reference σε βιβλιοθήκη

    Έχεις κατεβάσει αυτό ή κάτι άλλο;

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  27-01-2012, 18:12 69042 σε απάντηση της 69030

    Απ: Reference σε βιβλιοθήκη

    Απ' ό,τι βλέπω, αν αναφερόμαστε στο ίδιο dll, στο παράδειγμα της VB υπάρχει ήδη αρχείο με δηλωμένες τις functions (VantageProDll.vb). Οπότε γιατί γράφεις δικό σου; Ακόμα κι αν θέλεις η ASP.NET εφαρμογή σου να είναι σε c#, μπορείς να "αναμίξεις" κώδικα γραμμένο και στις δύο γλώσσες, αρκεί ν' ακολουθήσεις τις οδηγίες που αναφέρονται εδώ (Multiple Programming Languages in the App_Code Folder).


    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  27-01-2012, 19:54 69044 σε απάντηση της 69030

    Απ: Reference σε βιβλιοθήκη

    Ειλικρινά, τώρα που το ξαναδιάβασα κατάλαβα ότι το πρόβλημα υπάρχει στο deployment. Ομολογώ ότι κάπου χάθηκα στην εκτενή σου περιγραφή. Δύο σχετικές πηγές που μπορούν να σου φανούν χρήσιμες είναι αυτή και αυτή.

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  27-01-2012, 22:34 69047 σε απάντηση της 69042

    Απ: Reference σε βιβλιοθήκη

    Kαταρχήν ευχαριστώ πολύ για τις απαντήσεις....

    Για τον Γιώργο :  το web part είναι απο εδώ http://www.codeproject.com/Articles/20239/Connecting-a-Davis-Instruments-Vantage-Weather-Sta 

    Είναι σε windows forms αλά το μετέφερα εύκολα se asp.net

    Για το Μάρκο : μιλάμε για τον σταθμό που έχεις στο link και ναι στο παράδειγμα υπάρχει ήδη αρχείο με δηλωμένες τις functions απλά το μετέτρεψα σε c# γιατί δεν αισθάνομαι πολύ οικείος με vb πάντως δεν χτύπησε όταν ήταν και σε vb.

    Το θέμα είναι είτε με vb είτε σε c# χτυπάει με αυτά τα περίεργα λάθη....

    Παναγώτη : όπως αναφέρω ... Βέβαια η dll υπάρχει παντού και στο bin και έχει δικαιώματα ο IUSER και στο root του web site και υπάρχουν και κανα δυό επιπλέον depedences dll που και αυτά επίσης υπάρχουν στο PATH κλπ...

     

     

     

     

     

  •  27-01-2012, 22:41 69048 σε απάντηση της 69044

    Απ: Reference σε βιβλιοθήκη

    Markos:
    Ειλικρινά, τώρα που το ξαναδιάβασα κατάλαβα ότι το πρόβλημα υπάρχει στο deployment. Ομολογώ ότι κάπου χάθηκα στην εκτενή σου περιγραφή. Δύο σχετικές πηγές που μπορούν να σου φανούν χρήσιμες είναι αυτή και αυτή.

    Το δεύτερο link φαίνεται ενδιαφέρον θα δοκιμάσω να δώ αν οι υποδείξεις δουλεύουν, ευχαριστώ...

     

  •  27-01-2012, 23:22 69049 σε απάντηση της 69048

    Απ: Reference σε βιβλιοθήκη

    Θέλω να ρωτήσω κάτι ακόμα: Ποιο ακριβώς είναι το σενάριο;

    1. Διαβάζεις δεδομένα από το PC σου και τα στέλνεις στο Web Page.
    2. Η ιστοσελίδα σου διαβάζει δεδομένα κατευθείαν από τον σταθμό (ο σταθμός είναι ορατός στο internet).
    Αν ισχύει το 1, τότε δεν χρειάζεται να κάνεις deploy το dll. Φτιάχνεις web services για να κάνεις upload τα data που έχεις διαβάσει από το σταθμό.

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  28-01-2012, 02:44 69050 σε απάντηση της 69049

    Απ: Reference σε βιβλιοθήκη

    Markos:
    Θέλω να ρωτήσω κάτι ακόμα: Ποιο ακριβώς είναι το σενάριο;

    1. Διαβάζεις δεδομένα από το PC σου και τα στέλνεις στο Web Page.
    2. Η ιστοσελίδα σου διαβάζει δεδομένα κατευθείαν από τον σταθμό (ο σταθμός είναι ορατός στο internet).

    Αν ισχύει το 1, τότε δεν χρειάζεται να κάνεις deploy το dll. Φτιάχνεις web services για να κάνεις upload τα data που έχεις διαβάσει από το σταθμό.

    Ισχύει Το δεύτερο σενάριο.

     

  •  28-01-2012, 03:15 69052 σε απάντηση της 69048

    Απ: Reference σε βιβλιοθήκη

    geoneo:

    Markos:
    Ειλικρινά, τώρα που το ξαναδιάβασα κατάλαβα ότι το πρόβλημα υπάρχει στο deployment. Ομολογώ ότι κάπου χάθηκα στην εκτενή σου περιγραφή. Δύο σχετικές πηγές που μπορούν να σου φανούν χρήσιμες είναι αυτή και αυτή.

    Το δεύτερο link φαίνεται ενδιαφέρον θα δοκιμάσω να δώ αν οι υποδείξεις δουλεύουν, ευχαριστώ...

     



    Φαινότανε πράγματι ενδιαφέρων....
    Λοιπόν κατά τις υποδέιξεις του δεύτερου link πρόσθεσα τα παρακάτω :

    1. Στο web.config

       <appSettings>
        <add key="NativePath" value="C:\MyNativeDLLs"/>
       </appSettings>

    2. Στο global.asax

    protected void Application_Start(object sender, EventArgs e){
        String _path = String.Concat(System.Environment.GetEnvironmentVariable("PATH"), ";", ConfigurationSettings.AppSettings["NativePath"]);
        System.Environment.SetEnvironmentVariable("PATH", _path, EnvironmentVariableTarget.Process);
    }


    Και δούλεψε....
    Μάρκο είσαι μεγάλος !!!
    Ευχαριστώ για το link.....

  •  28-01-2012, 18:37 69058 σε απάντηση της 69052

    Απ: Reference σε βιβλιοθήκη

    Δεν έκανα τίποτα... Η Google μου το βρήκε.

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  01-02-2012, 02:43 69091 σε απάντηση της 69058

    Απ: Reference σε βιβλιοθήκη

    Καλησπέρα και πάλι...
    Έχω φτάσει στο σημείο να καλώ  ένα μεγάλο πλήθος από τις functions της βιβλιοθήκης χωρίς πρόβλημα…
    Όμως έχω κολλήσει στο παρακάτω και χρειάζομαι ένα χέρι βοήθειας…

    Υπάρχει μια Function στην dll που στο documentation περιγράφεται ως εξής  :

    short int GetArchiveRecord_V(WeatherRecordStruct * newRecordStruct, short int i)

    είναι μια function που την καλείς, της  περνάς την διεύθυνση μιας struct της WeatherRecordStruct  και στην γεμίζει με data….

    η struct και η function τις παραθέτω όπωσ περιγράφονται στο documentation...


    struct WeatherRecordStruct
    {
    short year;
    char month;
    char day;
    short packedTime;
    char dateStr[16];
    char timeStr[16];
    float heatIndex;
    float windChill;
    float hiOutsideTemp;
    float lowOutsideTemp;
    float dewPoint;
    float windSpeed;
    short windDirection;
    char windDirectionStr[5];
    }



    ερώτηση :
    Εσείς πως θα το μετατρέπατε σε C#  
    Προσέξτε την struct έχει διάφορα aray
    εγώ ότι και να έκανα χτυπούσε….

    Παραθέτω τον τρόπο που την έχω δουλέψει...

    public static class VantageProDll
    {

        public class WeatherRecordStruct
         {
         short year;
         char month;
         char day;
         short packedTime;
         char[] dateStr = new char[16];
         char[] timeStr = new char[16];
         float heatIndex;
         float windChill;
         float hiOutsideTemp;
         float lowOutsideTemp;
         float dewPoint;
         float windSpeed;
         short windDirection;
          }

        [DllImport("VantagePro.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
        public static extern Int16 GetArchiveRecord_V(ref WeatherRecordStruct newRecord, Int16 i);
    }


    VantageProDll.WeatherRecordStruct record = new VantageProDll.WeatherRecordStruct();
    VantageProDll.GetArchiveRecord_V(ref record, 1);

  •  01-02-2012, 10:33 69092 σε απάντηση της 69091

    Απ: Reference σε βιβλιοθήκη

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
            byte[] dateStr;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
            byte[] timeStr;
      Το char στην c είναι 1 byte, στην c# 2 bytes.


  •  01-02-2012, 10:35 69093 σε απάντηση της 69091

    Απ: Reference σε βιβλιοθήκη

    Μπορείς να χρησιμοποιήσεις το αρχείο σε VB που ανέφερα παραπάνω. Εκεί θα δεις ότι το signature είναι:

    Structure WeatherRecordStruct
            Dim year As Int32
            Dim month As Byte
            Dim day As Byte
            Dim packedTime As Int32
            Dim dateStr As String
            Dim timeStr As String
            Dim heatIndex As Single
            Dim windChill As Single
            Dim hiOutsideTemp As Single
            Dim lowOutsideTemp As Single
            Dim dewPolong As Single
            Dim windSpeed As Single
            Dim windDirection As Single
            Dim windDirectionStr As String
            Dim hiWindSpeed As Single
            Dim rain As Single
            Dim barometer As Single
            Dim insideTemp As Single
            Dim outsideTemp As Single
            Dim insideHum As Single
            Dim outsideHum As Single
            Dim archivePeriod As Int32
        End Structure
    
    
        <DllImport("VantagePro.dll", CharSet:=CharSet.Ansi, CallingConvention:=CallingConvention.StdCall)> _
        Public Function GetArchiveRecord_V(ByRef newRecord As WeatherRecordStruct, ByVal i As Int16) As Int16
        End Function
    Όλη η δουλειά έχει γίνει για σένα από τον κατασκευαστή. Γιατί απλά δεν προσθέτεις ένα reference και παιδεύεσαι;

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
Σελίδα 1 από 2 (22 εγγραφές)   1 2 >
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems