Newsgroup: it.comp.lang.delphi
Titolo: Funzione esterna

Ciao a tutti, grazie mille per le vostre precedenti risposte.
Continuo ad avere un problema di concetto, cioč non riesco a capire come
ritornare ad una funzione chiamante del valori.
Mi spiego: mettiamo che io ho un programma A ed una DLL B.
Vorrei che la funzione B_FCT all'interno della DLL ricevesse come parametri B1,
B2 e dopo aver fatto dei conticini mi ritornasse B3 e B4 come valori e un
intero per dirmi se č andato tutto OK o no.
La funzione nella DLL potrebbe essere la seguente:
function B_FCT(B1, B2: pChar; var B3, B4:pChar ):Smallint;
  var Stringozzo1, Stringozzo2:String;
      Stringozzo3, Stringozzo4:String;
begin
  Stringozzo1 := StrPas(B1);
  Stringozzo2 := StrPas(B2); 
  Stringozzo3 := FunzioneCheMiTornaUnaStringa_0(Stringozzo1);  
  Stringozzo4 := FunzioneCheMiTornaUnaStringa_1(Stringozzo2);  
// ----------------------------------------
  StrCopy(B3 , PChar(Stringozzo3));
  StrCopy(B4 , PChar(Stringozzo4));
// ----------------------------------------
  if ... then
    Result := 1
  else
    Result := 0;
end;
La funzione chiamante dovrebbe essere pressapoco cosi:
Procedure EventoBottoneClick(Sender:TObject);
var
  buf1 : array [0..23] of Char;
  buf2 : array [0..7 ] of Char;
  buf3 : array [0..31] of Char;
  buf4 : array [0..39] of Char;
begin  
  StrPCopy(buf1, A1.Text);
  StrPCopy(buf2, A2.Text);
 
  Edit6.Text := IntToStr(B_FCT(buf1,  buf2,  Buf3, Buf4));
  A3.Text := (buf3);
  A4.Text := (buf4);
end;
I valori B1(buf1) e B2(buf2) vengono passati perfettamente, solo che non mi
vengono visualizzati i valori di ritorno. Ho meglio mi da errore nella B_FCT
qui:
  StrCopy(B3 , PChar(Stringozzo3));
  StrCopy(B4 , PChar(Stringozzo4));
Dove sbaglio? Grazie mille.
   Marco
-- 
Posted from  [212.177.57.193] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

function B_FCT(B1, B2: pChar; var B3, B4:pChar ):Smallint;
I PChar non sono altro che dei puntatori, passarli come var, in questo
caso, non ha molto senso in quanto tu non vai a modificare l'indirizzo
del  puntatore ma il suo contenuto.
Tra l'altro non capisco come tu possa compilare 
Edit6.Text := IntToStr(B_FCT(buf1,  buf2,  Buf3, Buf4)); -- dovrebbe
andare in errore.
Quindi:
function B_FCT(B1, B2, B3, B4:pChar ):Smallint;
inoltre, IMHO, 
StrCopy(B3 , PChar(Stringozzo3)); e' ridondante, meglio:
StrPCopy(B3, Stringozzo3);
Ciao,
Massimo.
-----------
Ore 18.30: premo invio.

andare in errore.
Perche' dovrebbe andare in errore ?
A me sembra del tutto legale.
--
Andrea Laforgia - walkietalkie(at)
libero.it
http://www.geocities.com/AndreaLaforgia

A me sembra del tutto legale.
Perche' va in errore :) 
Prova  a compilarla. Buf3 e Buf4 sono dichiarati come array of char
nella procedura chiamante e non puoi passarli come [var pChar] nella
funziona chiamata.

 funziona chiamata.
Ah ok, non avevo presente le definizioni di Buf3 e Buf4.
Pensavo ti riferissi al valore di ritorno della funzione.
-- 
Posted from  [80.105.34.80] 


 wrote in message
news:8168463fd7b5aaa3f41...@mygate.mailgate.org...

-- 
Posted from  [212.177.57.193] 


Non so più che pesci pigliare.
Devi stare attento quando maneggi i puntatori, perche'
l'errore piu' comune e' quello di utilizzare dei puntatori
non inizializzati.
Hai allocato abbastanza memoria, prima di usare i puntatori
?


 wrote in message
news:3ba887e...@news.tin.it...

