¿Hay alguna manera de cargar dinámicamente y llamar dinámicamente funciones de D en D? Me gustaría que mi programa pueda cargar complementos al inicio y quizás también sobre la marcha.Cargando complementos (DLL) sobre la marcha
Respuesta
Depende de la dinámica que desee obtener. Si desea cargar dinámicamente un dll y ejecutar algunas funciones predefinidas, Wei Li tiene una envoltura muy bonita here. Gracias al poder de las plantillas, le permite hacer cosas como estas:
// 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);
El código es D1. Para D2, debe reemplazar char[]
con string
, usar toStringz()
y posiblemente eliminar scope
. Editar:my D2 port de este código podría ser útil para que otros encuentren esta pregunta.
Ojalá tuviera más puntos mod +1. Esto es exactamente lo que estaba buscando. ¡Gracias! –
@Timothy: Me alegro de que haya ayudado. Para mí, el código es un buen ejemplo de cuánto puedes lograr con un par de líneas de código usando plantillas y mixins. Casi se siente como Python. – stephan
Me doy cuenta de que esto tiene algunos meses, ¡pero muchas gracias por la actualización de D 2.0! ¡También me gustaría tener más votos para repartir! –
- 1. Cargando complementos Haskell sobre la marcha
- 2. Cargando jQuery sobre la marcha
- 3. Requirejs cargando complementos
- 4. métodos Creación sobre la marcha
- 5. Powershell dll cargando
- 6. Convertir EPS a PDF sobre la marcha con pdflatex sobre la marcha
- 7. Cargando dinámicamente un archivo DLL
- 8. Cargando la DLL desde una ubicación en la memoria
- 9. Archivos ZIP de PHP sobre la marcha
- 10. Perl: ¿cómo crear objetos sobre la marcha?
- 11. Java ArrayList y HashMap sobre la marcha
- 12. "Editar" texto del usuario sobre la marcha?
- 13. Creación de subdominios sobre la marcha
- 14. Cálculo de percentiles sobre la marcha
- 15. WebView css carga sobre la marcha
- 16. ¿Cómo nombrar variables sobre la marcha?
- 17. Escribir en/res/dibujable/sobre la marcha?
- 18. ¿Validar EmberJS TextField sobre la marcha?
- 19. Generando un archivo RDP sobre la marcha
- 20. ¿Puedo crear colas resque sobre la marcha?
- 21. primavera: agregue contexto xml sobre la marcha?
- 22. C# 4.0, ¿Métodos sobre la marcha?
- 23. Creación de claves JSON sobre la marcha
- 24. VB.Net Inicializando una matriz sobre la marcha
- 25. claves de diccionario Generación sobre la marcha
- 26. uploadify | cambiar uploadifysettings sobre la marcha
- 27. DLL de complementos que dependen de otras DLL
- 28. Sistema de complementos para la aplicación Delphi - bpl vs dll?
- 29. Cambiando CSS sobre la marcha en un UIWebView en iPhone
- 30. Cambiar la ordenación en un NSFetchedResultsController sobre la marcha
Sí. Aquí hay una referencia rápida: http://www.digitalmars.com/d/2.0/dll.html –
Eso es a lo que le tenía miedo ... básicamente estamos atrapados con el uso del método C para obtener la dirección del proceso y pasar de ahí. No es terrible, supongo, ya que puedo envolver todos mis objetos de complemento en una "fábrica maestra", pero no es óptimo. –