Código:
Nueva interfaz de dll de especificaciones.
En la actualidad existe un directorio en el blitzpath raíz llamado userlibs.
Mediante la adición de archivos dll y archivos. Decls a este directorio, se puede extender conjunto bombardeo de comandos.
Dll contienen en realidad el código de la biblioteca, mientras que. Decls archivos contienen declaraciones que se añade a la.
Comando de la base establecida. Estas declaraciones describen las funciones contenidas en el archivo dll.
Formato de los archivos decls.
Archivos decls siempre debe comenzar con una directiva. Lib, seguido por el nombre entre comillas de la dll que se.
Cargado, por ejemplo:
Lib mylib, dll.
Después de la lib. Es una lista de declaraciones de funciones. La sintaxis de estos es idéntica a la.
Declaraciones de las funciones de Blitz, con las siguientes excepciones:
* no hay valores de los parámetros por defecto se permite.
* si no hay ningún tipo de retorno de la función se especifica, la función es un vacío función - Es decir: no devuelve nada.
* en lugar de los parámetros del objeto, sólo se puede especificar los parámetros de Void * con un * etiqueta tipo. Tal.
Parámetros se puede asignar cualquier objeto o un banco, así que, cuidado.
* una declaración puede ser seguido de un nombre representativo. Esto toma la forma de un.
Seguido de una cadena entre comillas que indica el nombre representativo, por ejemplo:
Myfunction ($ texto): _myfunction @ 4.
De mensaje% (hwnd, $ texto, $ título, estilo): messageboxa.
El nombre representativo es el nombre de la función tal y como aparece en la dll, y sólo necesita ser.
Especificada si es diferente del nombre de la función actual.
Dll de la escritura.todas las funciones deben utilizar la convención de llamada _stdcall.
Los flotadores son pasados y devueltos conforme a la norma c / c + + convenciones.
Las cadenas se pasó y regresó en c formato - Es decir: un puntero a una secuencia de terminación nula de.
Personajes.
Cadenas debe ser devuelto en un buffer de estática de la memoria. Una vez que la función retorna, esta cadena es.
Inmediatamente copia en una cadena de Blitz estilo interno, por lo que su visto bueno a compartir esta separación entre.
Múltiples funciones.
Tanto los bancos como los objetos pueden ser pasados a las funciones. El valor que se pasa es la dirección del primer byte.
De almacenamiento. No se envía información sobre el tamaño o el tipo de memoria pasa así, de nuevo, ten cuidado.
Ni los bancos ni los objetos pueden ser devueltos de las funciones.
Las matrices no son compatibles en absoluto.
Visualc decora símbolos muy fuerte. Si esta codificando en c, el diseñador stdcall necesario.
Causara un _ que se antepone, y una @ (seguido por el número de bytes pasados a la función.
Es decir: el número de parámetros * 4) para que se adjunte. Por lo tanto, algo, así como: myfunc _stdcall Void (int x).
Va a terminar como _myfunc @ 4. En c + +, la decoración de nombres es aún más desordenado. Pero se puede suprimir por.
A través del extern c característica (ver ejemplos más abajo) por lo que está justo a la izquierda con el desorden stdcall c.
Otros idiomas, como Delphi y purebasic no parecen sufrir de esta función, pero puede ser.
Que vale la pena mirar a través de símbolos (*.dll) si usted esta teniendo problemas. Echa un vistazo a peview.
Http://www.magma, ca/ ~ wjr abrir el archivo dll y «sección, rdata select / exportar tabla de direcciones.
Para echar un vistazo a los símbolos exportados del compilador ha tenido a bien conceder a la dll.
Ejemplo.
Ok, aquí hay un poco de c + + ejemplo, tal y como aparecería en visualc.
En primer lugar, escribir la dll:
/ / demo, dll.
/ /.
# include <math, h>.
# include <string, h>.
# include.
# define bdecl extern c _declspec (dllexport).
# define _stdcall bcall.
/ / devuelve un flotador y tiene 6 parámetros float.
Bdecl flotar bcall vecdistance (float x1, float y1, float z1, float x2, float y2, float z2) { tfloat DX = x1-x2, dy = y1-y2, dz = z1-z2, tvolver sqrtf (dx * DX + dy * dy + dz * dz).
}.
/ / devuelve una cadena y tiene un parámetro de cadena.
Bdecl const char * bcall shuflestring (const char * str) { tstatic char * _buf, tqué int = strlen (str), tdeleete [] _buf, t_buf = new char [qué +1], tstrcpy (_buf, str), tfor (int que = 0, que <qué, que + +) { int n = Rand () qué%, int te = _buf [k]; _buf [k] = _buf [n]; _buf [n] = t, t} tvolver _buf.
}.
Después de la construcción de este demo, dll la resultante debe ser colocado en el directorio userlibs.
Ahora, también tenemos que crear un demo, decls archivo, que describe las funciones de nuestra dll. Este archivo.
También se coloca en el directorio userlibs:
Lib demo, dll.
Vecdistance # (# x1, y1 #, # z1, x2 #, # y2, z2 #): _vecdistance @ 24.
Shuflestring $ ($ cadena): _shuflestring @ 4.
Voila. El Blitz próxima vez que se puso en marcha, los nuevos comandos aparecen en el IDE y se pueden utilizar.
Un saludo aprendiz.