Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 17 su 17
  1. #11
    Utente di HTML.it L'avatar di colde
    Registrato dal
    Feb 2001
    Messaggi
    1,802
    Ho trovato l'inghippo ma non ne capisco il comportamento.
    Sostanzialmente succede questo:
    la funzione DLL richiamata dal software per leggere i dati da seriale, richiama a sua volta un'altra funzione presente sempre nella stessa DLL (è questa che effettivamente recupera i dati da seriale, la funzione chiamata dal software invece serve semplicemente per elaborare i dati recuperati e fare i dovuti controlli). Questa funzione che effettivamente recupera i dati da seriale, ritorna il risultato alla funzione chiamante tramite string, o almeno è quello che dovrebbe fare; infatti la prima volta che recupera i dati funziona perfettamente, la successiva invece non assegna i valori recuperati alla variabile di ritorno Result (e i dati sono stati recuperati al 100%) generando access violation (da debug la variabile Result contiene la dicitura 'Inaccessible value'). Perchè? Sono sicuro che il numero di caratteri prelevati da seriale non superano i 255 a disposizione delle string quindi non mi spiego il comportamento.
    www.beppegrillo.it
    Il blog di Beppe!!

  2. #12
    Utente di HTML.it L'avatar di colde
    Registrato dal
    Feb 2001
    Messaggi
    1,802
    Risolto, ho usato un accorgimento ed era legato indirettamente dalla deallocazione del buffer.
    www.beppegrillo.it
    Il blog di Beppe!!

  3. #13
    Utente di HTML.it L'avatar di colde
    Registrato dal
    Feb 2001
    Messaggi
    1,802
    No, ho cantato vittoria troppo presto.
    www.beppegrillo.it
    Il blog di Beppe!!

  4. #14
    Utente di HTML.it L'avatar di colde
    Registrato dal
    Feb 2001
    Messaggi
    1,802
    Incredibile, perdonami ma è più forte di me, non riesco a trovare il senso di questo comportamento. Ho semplificato le due funzioni all'inverosimile per isolare il problema ma non c'è niente da fare, va contro ogni mia logica.

    Codice DLL
    codice:
    //Funzione che Recupera i dati dalla seriale
    Function DownloadPolling(IDBOX: String): String; StdCall;
     var
      Response    : String;
    begin
      Response := '';
      if Conn then
        begin
          ApdComPort1.PutString(chr($04));
          ApdComPort1.PutString(chr($01)+chr($41)+IDBOX+chr($05));
          NewTimer(ET, 4);
          repeat
            while ApdComPort1.CharReady do
              begin
                Response := Response+ApdComPort1.GetChar;
              end;
          until TimerExpired(ET);
        end;
        DownloadPolling := Response; ---> QUI ALLA SECONDA CHIAMATA NON VIENE IMPOSTATO NULLA MA RESPONSE CONTIENE I DATI.
    end;
    
    
    Function Polling(DID: PChar): PChar; export; StdCall;
    var
      ResponseBox : String;
    begin
      if Conn then
      begin
          repeat
            ResponseBox := DownloadPolling(DID);
          until ResponseBox <> '';
      end
      else
      begin
        ResponseBox := 'ERROR: COM Port Close';
      end;
      GetMem(Result,Length(ResponseBox)+1);
      Result := StrPCopy(Result, ResponseBox);
    end;
    Codice Form del Software
    codice:
    TextReturn := Polling('PIPPO');
    Memo1.Lines.Add(TextReturn);
    FreeMem(TextReturn); --> Questa parte vorrei farla gestire dalla DLL con una funzione
    Ecco quello che succede:
    alla prima chiamata della funzione Polling() funziona tutto regolarmente (richiama la funzione DownloadPolling e ritorna il valore correttamente), alla seconda invece, quando arriva ad eseguire il codice della funzione DownloadPolling, i dati vengono scaricati dalla seriale in modo corretto ma non viene assegnato nulla alla variabile di ritorno. Perchè? Porca pupazza perchè?????
    www.beppegrillo.it
    Il blog di Beppe!!

  5. #15
    Utente di HTML.it L'avatar di colde
    Registrato dal
    Feb 2001
    Messaggi
    1,802
    UP!!!
    www.beppegrillo.it
    Il blog di Beppe!!

  6. #16
    Utente di HTML.it L'avatar di colde
    Registrato dal
    Feb 2001
    Messaggi
    1,802
    up!!
    www.beppegrillo.it
    Il blog di Beppe!!

  7. #17
    Utente di HTML.it L'avatar di colde
    Registrato dal
    Feb 2001
    Messaggi
    1,802
    UP! Non sono ancora riuscito a capire il problema
    www.beppegrillo.it
    Il blog di Beppe!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.