Dopo il this question, ho bisogno di sapere quali principi devono essere seguiti per rendere l'incapsulamento di una classe in una DLL compatibile con un'altra versione di Delphi. Ho creato una classe utilizzando la funzione generics in RAD2010 e ho creato una DLL che ha una funzione che restituisce un'istanza di essa. Quando ho provato a utilizzare la dll utilizzando BDS2006 o Delphi 6, la DLL non ha funzionato come previsto. Ma se uso RAD2010 su un altro computer, non ci sono problemi. È causato dall'utilizzo della funzione non disponibile nella precedente versione di Delphi (stack <?)? Per questioni relative alle stringhe, ho già seguito la guida ai commenti nel file della libreria, che ho inserito ShareMem sia nella clausola first uses della libreria sia nel mio progetto. E ho copiato borlndmm.dll da RAD2010 nella stessa cartella in cui ho provato la DLL usando BDS2006. Non è andato in crash, ma non ha funzionato. Una funzione restituisce una stringa vuota quando nell'ambiente RAD2010 ha funzionato molto bene.Quali principi dovrebbero essere seguiti per far sì che una DLL creata usando Delphi funzioni bene in altre versioni di Delphi?
Ancora una volta, ho una domanda: quali principi dovrebbero essere seguiti per rendere l'incapsulamento di una classe in una DLL compatibile con un'altra versione di Delphi? Grazie in anticipo. (Per incapsulare le funzioni in una DLL quando non si utilizza OOP, non ho rilasciato alcuna altra versione di Delphi).
Vorrei una forte enfasi sul secondo paragrafo. Se non vedi una funzionalità esposta nell'API di Windows, non esporla nemmeno nella tua DLL. Fai finta di scrivere una DLL per essere consumata da C, o anche da un ambiente che non hai mai visto prima. –
+1. Potrebbe anche essere utile sottolineare che non ci dovrebbero (o non devono) esserci tipi specifici di Delphi nei parametri del metodo di interfaccia e nei risultati delle funzioni, né come parti di tali record. – mghie
+1. Forse non correlato, ma non dimenticare di dichiarare tutte le esportazioni di DLL (non COM) come stdcall se le utilizzerai in lingue diverse da Delphi. –