Newsgroup: it.comp.lang.delphi
Titolo: Vorrei creare una DLL ....ma non ci riesco. - CodFisc.txt (0/1)

Salve, 
come da subject, in realtà la dll l'ho creata ma funziona 26 volte
consecutive e poi si blocca?????
Volevo creare una dll con la funzione per fare il codice fiscale (vi
assicuro che in un programma Delphi 3-4-5 funziona perfettamente
infatti la uso tutti i giorni) solo che ho usato tipi string. Le
istruzioni dicono che se usi tipi string devi associare l'unit
Sharemem e così ho fatto ma non funziona lo stesso.
Allegata a questo messaggio c'è la funzione (da me creata) per fare i
codici fiscali, perchè? Ho provato più volte a trasformare le
variabili stringa in var char per poter fare la dll compatibile con
win e funzionante, ma non riesco a trasformare le routine.
Sarei molto grato a qualcuno se, nel caso in cui trasformasse il mio
codice, mi potrebbe ripostare il codice utilizzando le variabili char.
Io purtroppo non ci sono riuscito.
Scusate se ho osato tanto, ma in ogni caso, che mi rispondiate o meno
a qualcuno le funzioni per creare il CF potrebbero pure servire no?
Magari qualche pivello più di me potrebbe imparare qualche cosa e
forse anche io potrei imparare qualche cosa di più, questo è lo
spirito di questo post.
Grazie
Robin

 Io purtroppo non ci sono riuscito.
quale codice ? Posta il codice scrivedolo direttamente nel messaggio, però
non postare 300 righe di codice altrimenti nessuno ci perderà tempo, anzi
appena vede di cosa si tratta tutti passano al successivo !!! :-)))
Ti saluto.....facci sapere !!
Antonio Tarolla

corretto.
Nessun "type-casting". Si puo' operare sui pchar senza effettuare
alcuna conversione di tipo.
--
Andrea Laforgia (ICQ 87230455)
http://www.geocities.com/AndreaLaforgia
"ci sono tre tipi di persone nel mondo : quelli che
 sono bravi in matematica e quelli che non lo sono."

consecutive !!! :-))))
 :-)
 Antonio, non è che faccio test severi ma siccome per puro caso ho
visto che la dll si bloccava mi sono 
dilettato a vedere se come e quando si bloccava e allora ho vistro che
si blocca sempre alla 26 esecuzione. :-)
Comunque il codice l'ho postato come allegato., Non so che programma
di news usi ma se usi Agent trovi due messaggi consecutivi di subject
uguali al secondo c'è il codice allegato come file di testo.
In ogni caso te lo allego alla mail per la quale mi scuso.
Ciao
Robin

uguali al secondo c'è il codice allegato come file di testo.
???
Io uso agent e non lo vedo nemmeno io.
è' vero che il server da me è InWind e spesso mi capita di pensare
bip bip bip bip bip bip anche oggi non va !!!!
però in questo caso penso che il problema sia che questo 
ng taglia tutti gli allegati.

ng taglia tutti gli allegati.
Nella gerarchia it.* ad esclusione di ng puramente dedicati ai file
binari NON si devono postare allegati (xche' vengono, giustamente,
tagliati).


Non sapevo che non si devono allegare file, comunque era molto
piccolo, in ogni caso provo a postare direttamente il codice (credo
non sia molto lungo, scusandomi se mai avessi creato dei problemi.
Robin
(N.B.) Garantisco che funziona perfettamente (lo uso tutti i giorni)
Function UltimaLettera(Codice: string): string;
Var
Dispari, Pari: string;
X,z,count: integer;
TotDispari, TotPari, Totale: integer;
const
Alf1: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
Alf2: string = 'BAKPLCQDREVOSFTGUHMINJWZYX';
CIF1: string = '0123456789';
CIF2: string = '10   2 3 4   5 6 7 8 9    ';
begin
TotDispari :=0;
TotPari := 0;
//Totale := 0;
Codice := UpperCase(Codice);
Count:=2;
while (count <= 14)do
  begin
        Pari := Pari + copy (Codice,count,1);
        inc(count,2);
  end;
     for x:= 1 to 7 do   //calcola la somma dei pari lettere
         for z := 1 to 26 do
                If Pari[x]=Alf1[z] then
                        TotPari:=Totpari+z;
     for x:= 1 to 7 do  //calcola la somma dei pari  numeri
         for z := 1 to 10 do
                If Pari[x]=CIF1[z] then
                        TotPari:=Totpari+z;
Count:=1;
while (count <= 15)do  //crea la stringa delle dispari
  begin
        Dispari := Dispari + copy (Codice,count,1);
        inc(count,2);
  end;
     for x:= 1 to 8 do  //calcola la somma dei dispari lettere
         for z := 1 to 26 do
                If Dispari[x]=Alf2[z] then
                        TotDispari:=TotDispari+z;
     for x:= 1 to 8 do  //calcola la somma dei dispari  numeri
         for z := 1 to 26 do
                If Dispari[x]=CIF2[z] then
                        TotDispari:=TotDispari+z;
Totale := 1 +((TotDispari + TotPari)-15) mod 26 + 64;
//UltimaLettera:=IntToStr(Totale);
UltimaLettera:= chr(Totale);
end;
function CalcolaCF(Cog: string; Nom: string; sex: string; datanas:
string;
                   codex: string): string;
const
Vocali1: array[1..5] of string[1]=
('A', 'E', 'I', 'O', 'U');
Conson1: array[1..21] of string[1]=
('B', 'C', 'D', 'F', 'G','H', 'J', 'K', 'L', 'M',
'N', 'P', 'Q', 'R', 'S','T', 'V', 'W', 'X', 'Y','Z');
var
    x: integer;
    conson, vocali,consons,vocal: String;
    anno,mese,giorno: String;
    cognome, nome: String;
    cofis, Ultima: string;
  i: integer;
 begin
 Cog := UpperCase(Cog); Nom:=UpperCase(Nom);
 Sex:=Uppercase(Sex); datanas := UpperCase(datanas);
 Codex := Uppercase(codex);
  //questa routine separa le vocali dalle consonanti
  for i := 0 to Length(cog) do
  for x := 1 to 5 do
  if  cog[i] = vocali1[x] then
  vocali := vocali + vocali1[x];
  for i := 0 to Length(cog) do
  for x := 1 to 21 do
  if  cog[i] = conson1[x] then
  conson := conson + conson1[x];
  if (Length(conson)= 0) and (length(vocali)>0) then
     if (length(vocali)=1) then cognome := vocali+'XX'
     else if (length(vocali)=2) then cognome := vocali +'X'
     else if (length(vocali)>=3) then cognome := copy(vocali,1,3);
  if (Length(conson)= 1) and (length(vocali)=0) then
     cognome := conson + 'XX';
  if (Length(conson)= 2) and (length(vocali)=0) then
     cognome := conson + 'X';
  if (Length(conson)= 1) and (length(vocali)>0) then
     if (length(vocali)=1) then cognome := conson + vocali +'X'
     else if (length(vocali)>=2) then cognome := conson +
copy(vocali,1,2);
  if (Length(conson)= 2) and (length(vocali)>0) then
     cognome := conson + copy(vocali,1,1);
  if (Length(conson)>= 3)then
     cognome := copy(conson,1,3);
  //ROUTINE PER IL NOME
  for i := 0 to Length(Nom) do
  for x := 1 to 5 do
  if  Nom[i] = vocali1[x] then
  vocal := vocal + vocali1[x];
  for i := 0 to Length(Nom) do
  for x := 1 to 21 do
  if  Nom[i] = conson1[x] then
  consons := consons + conson1[x];
  if (Length(consons)= 0) and (length(vocal)>0) then
     if (length(vocal)=1) then nome := vocal+'XX'
     else if (length(vocal)=2) then nome := vocal +'X'
     else if (length(vocal)>=3) then nome := copy(vocal,1,3);
  if (Length(consons)= 1) and (length(vocal)=0) then
     nome := consons + 'XX';
  if (Length(consons)= 2) and (length(vocal)=0) then
     nome := consons + 'X';
  if (Length(consons)= 1) and (length(vocal)>0) then
     if (length(vocal)=1) then nome := consons + vocal +'X'
     else if (length(vocal)>=2) then nome := consons +
copy(vocal,1,2);
  if (Length(consons)= 2) and (length(vocal)>0) then
     nome := consons + copy(vocal,1,1);
  if (Length(consons)= 3)then
     nome := copy(consons,1,3);
  if (Length(consons)> 3)then
     nome := copy(consons,1,1) + copy(consons,3,2);
  //anno
  anno := copy(datanas ,7,2);
  //Mese
  if  (copy(datanas ,4,2)) = '01' then mese := 'A'
  else  if  (copy(datanas ,4,2)) = '02' then mese := 'B'
  else  if  (copy(datanas ,4,2)) = '03' then mese := 'C'
  else  if  (copy(datanas ,4,2)) = '04' then mese := 'D'
  else  if  (copy(datanas ,4,2)) = '05' then mese := 'E'
  else  if  (copy(datanas ,4,2)) = '06' then mese := 'H'
  else  if  (copy(datanas ,4,2)) = '07' then mese := 'L'
  else  if  (copy(datanas ,4,2)) = '08' then mese := 'M'
  else  if  (copy(datanas ,4,2)) = '09' then mese := 'P'
  else  if  (copy(datanas ,4,2)) = '10' then mese := 'R'
  else  if  (copy(datanas ,4,2)) = '11' then mese := 'S'
  else  if  (copy(datanas ,4,2)) = '12' then mese := 'T';
  //GIORNO
  if sex = 'M' then giorno :=(copy(datanas ,1,2))
  else if sex = 'F' then
  giorno := inttostr((4+ strtoint(copy(datanas ,1,1))))+
  copy(datanas ,2,1);
  //Codix := DBEdit1.Text;
  cofis := cognome+nome+anno+mese+giorno+Codex;
  Ultima := UltimaLettera (cofis);
  //edit7.text:= cognome+nome+anno+mese+giorno+Codix;
  CalcolaCF :=  cofis + Ultima
end;

Salve volevo sapere quale è il miglior libro di Delphi 5 per imparare da
zero.

 ha scritto nel messaggio
news:95mavg$jn4$1...@lacerta.tiscalinet.it...
