Purtroppo non conosco bene il C per poterti dare maggiori indicazioni a riguardo, ma posso dirti quello che so riguardo alle stringhe in Delphi...magari giungi autonomamente alla soluzione.
In Delphi ci sono diverse tipi di stringhe; il tipo generico string corrisponde ad una AnsiString: si tratta di una struttura dati particolare (non standard) che viene gestita dal memory manager di Delphi e consente di ottimizzare l'allocazione di memoria per le stringhe.
Poi, esiste la stringa a lunghezza fissa che viene dichiarata con string[lunghezza]: questa viene rappresentata in memoria come un array di caratteri (locazioni di byte consecutive che contengono i singoli caratteri di una stringa più una locazione iniziale aggiuntiva che contiene il numero di caratteri).
Entrambe queste strutture dati non sono terminate da un carattere nullo come generalmente si aspettano le funzioni API di Windows, ad esempio, ma Delphi è in grado di implementare questa rappresentazione facendo un cast della propria variabile stringa al tipo PChar, il puntatore a carattere.
Ad esempio, avendo una stringa "abc" immagazzinata in memoria, passando ad una funzione API (che si aspetta un puntatore a carattere) la forma PChar(stringa), Delphi costruisce al volo una rappresentazione della stringa terminata da un carattere nullo e ne passa il puntatore al primo carattere alla funzione.
In definitiva, forse dovresti tentare di modificare il prototipo della funzione importata in Delphi usando il tipo PChar e, successivamente, passare la stringa memorizzata (sia di lunghezza fissa che variabile o come array di caratteri) castandola a PChar come descritto sopra.
Prova così e vediamo cosa succede.![]()

Rispondi quotando