Ho letto il D Cookbook e vicino all'inizio c'è la seguente frase:Una DLL D può funzionare all'interno di SAS?
D è compatibile a livello binario con la C, ma non sorgente compatibile.
SAS allows users to define and call C functions from within SAS. Ma mi chiedo, sarebbe anche possibile farlo da D?
Ho trovato la risposta di Adam Ruppe per creare una DLL here e ho provato a utilizzarla per creare l'esempio DLL dalla documentazione SAS; tuttavia, ogni volta che vado a chiamarlo, viene caricata la DLL, quindi SAS si arresta in modo anomalo (senza alcun registro degli arresti anomali che riesco a trovare).
potrebbe essere che hai dichiarato le funzioni errate, il valore predefinito non è appropriato per questo –
Ciò che ha provocato il crash di SAS non mi sorprende; tuttavia, ho un'esperienza molto limitata con le DLL, e sostanzialmente nessuna all'interno di D. So che all'interno di SAS devono utilizzare la convenzione di chiamata __stdcall Gz, ma non sono sicuro di come verificare che ciò avvenga entro D. – charles
The crash Probabilmente manca 'extern (Windows)' come diceva CyberShadow. Giusto per chiarire quella frase, però, quello che volevo dire che c'era D può chiamare o rendere le funzioni chiamabili da C, ma non può leggere direttamente il codice sorgente di C. Ora, un * lotto * di codice C verrà compilato come D, e per lo più farà la stessa cosa, ma ci sono alcuni dettagli importanti da controllare. 'extern' è uno di questi. Anche i tipi di corrispondenza e i layout sono importanti. Con 'int' che è facile, un C int e un D int sono gli stessi. Ma passare le stringhe tra C e D è un po 'più complicato, quindi se provi a farlo, è probabile che vada in crash. –