Esiste un modo per caricare dinamicamente e richiamare funzioni da DLL dinamicamente in D? Mi piacerebbe che il mio programma fosse in grado di caricare i plugin all'avvio e forse anche al volo.Caricamento plug-in (DLL) al volo
risposta
Dipende da quanto dinamico si vuole ottenere. Se vuoi caricare dinamicamente una dll ed eseguire alcune funzioni predefinite, c'è un bel wrapper di Wei Li here. Grazie alla potenza dei modelli, ti permette di fare cose come queste:
// define functions
alias Symbol!("MessageBoxW", int function(HWND, LPCWSTR, LPCWSTR, UINT)) mbw;
alias Symbol!("MessageBoxA", int function(HWND, LPCSTR, LPCSTR, UINT)) mba;
// load dll
auto dll = new Module!("User32.dll", mbw, mba);
// call functions
dll.MessageBoxW(null, "Hello! DLL! ", "Hello from MessageBoxW", MB_OK);
dll.MessageBoxA(null, "Hello! DLL! ", "Hello from MessageBoxA", MB_OK);
Il codice è D1. Per D2, è necessario sostituire char[]
con string
, utilizzare toStringz()
ed eventualmente rimuovere scope
. Modifica:my D2 port di questo codice potrebbe essere utile agli altri per trovare questa domanda.
Vorrei avere più mod +1 punti. Questo e 'esattamente quello che stavo cercando. Grazie! –
@Timothy: sono contento che l'abbia aiutato. Per me, il codice è un buon esempio di quanto è possibile ottenere con un paio di linee di codice usando template e mixin. Sembra quasi come Python. – stephan
Mi rendo conto che questo ha pochi mesi, ma grazie mille per l'aggiornamento D 2.0! Vorrei anche avere più voti da distribuire! –
- 1. Caricamento plug-in Haskell al volo
- 2. PHPExcel scrivere al volo?
- 3. Caricamento di più immagini con il tiro al volo?
- 4. DLL plugin che dipendono da altre DLL
- 5. Converti EPS in PDF al volo con pdflatex al volo
- 6. creazione di metodi al volo
- 7. Ritardo caricamento DLL
- 8. Calcolo dei percentili al volo
- 9. aggiunta @ font-face al volo
- 10. Creazione di sottodomini al volo
- 11. Convalidare EmberJS TextField al volo?
- 12. Posso cambiare SparkContext.appName al volo?
- 13. Puoi cambiare templateUrl al volo?
- 14. Modifica campi serializzatore al volo
- 15. Xamarin Mvvmcross caricamento lento avvio dll
- 16. Caricamento PYTHON DLL non riuscito
- 17. Caricamento dinamico di una DLL
- 18. Creazione di un plugin per la dll
- 19. EEFileLoadException durante il caricamento di DLL C++ nella DLL gestita
- 20. Ottenere intestazioni da una risposta al volo
- 21. Rimuovere gli attributi al volo con Diazo
- 22. Avvio del profiler Java HPROF al volo
- 23. CSS Dissolvenza in apertura al volo stazionario
- 24. Python Gzip - Aggiungere file al volo
- 25. Creazione di chiavi JSON al volo
- 26. Angolare 2 - Aggiunta/rimozione componenti al volo
- 27. Modifica il valore delle impostazioni al volo?
- 28. Cifra video al volo dalla telecamera Android
- 29. Creazione di pulsanti paypal al volo
- 30. Cambiare il modello di Auth al volo
Sì. Ecco un breve riferimento: http://www.digitalmars.com/d/2.0/dll.html –
Questo è quello di cui avevo paura ... in pratica siamo bloccati ad usare il metodo C per ottenere l'indirizzo di proc e andare da Là. Non è terribile, suppongo, dal momento che posso avvolgere tutti gli oggetti plugin in una "fabbrica principale", ma non ottimale. –