2012-01-15 9 views
7

Cuál es el equivalente lenguaje D2 de __declspec (dllexport)Cómo exportar una variable de una DLL al compilar el lenguaje D2 con dmd?

tengo la vinculación D2 DLL example code en funcionamiento. La exportación de funciones, tanto en el espacio de nombres destrozado de dmd como en el espacio de nombres "C" estándar, funciona como un amuleto. Pero estoy corriendo en aguas inexploradas con respecto al intercambio de una variable (global) int entre las DLL así como el programa exe principal ... He comprobado la tabla de símbolos DLL con depends22_x86 y mientras hice un punto de usar la exportación directiva justo antes de la declaración de Var, no aparece en la tabla de la DLL, mientras que las funciones sí lo hacen. ¿Se puede exportar Varibles para ser visibles en una DLL con la cadena de herramientas dmd Digital Mars?

+3

Nunca lo intenté, pero asegúrese de usar __gshared. – Trass3r

+1

Muchos otros lenguajes/compiladores no admiten exportar variables. La exportación de variables es algo quebradizo de todos modos, porque falla en muchos escenarios (enlace de retardo) donde las funciones funcionan sin problemas. ¿Por qué no puedes escribir una función getter/setter para tu variable? – 0xC0000022L

Respuesta

0

Como solución alternativa, si la exportación o importación variables globales no funciona, a continuación, escribir una función de contenedor de la forma

Type variable; 

extern(C) Type * getGlobalVariable() 
{ 
    return &variable; 
} 

si desea exportar de D a C.

0

Tal vez puede hacer lo que Ralph Tandetzky dice pero en un módulo estático ctor. No tendrá que llamar explícitamente a ninguna función, se cargarán todos los símbolos. Tal vez __gshared sería apreciado también.

1

Esto fue un error en el compilador (Bugzilla 10059). El siguiente código debería funcionar ahora.

export __gshared int foo; 
Cuestiones relacionadas