Closed VisualStudioEX3 closed 2 years ago
Un ejemplo de por que habria que documentar div.h.
Revisando el codigo de las DLLs de demostracion, veo que para usar div_text_out
y otras funciones para manipular la memoria de video desde la DLL es necesario hacer que la DLL se autocargue, usando la macro Autoload
, e implementar el punto de entrada post_process_buffer
, desde donde div_text_out
funciona sin problemas.
Dejo el codigo corregido y cierro issue.
// PRINT.CPP
#define GLOBALS
#include "div.h"
#define getStringParm() (char*)&mem[text_offset + getparm()]
char *text_buffer;
void post_process_buffer(void)
{
div_text_out(text_buffer, 0, 0);
}
void print()
{
text_buffer = getStringParm();
retval(0);
}
void __export divlibrary(LIBRARY_PARAMS)
{
COM_export("print", print, 1);
}
void __export divmain(COMMON_PARAMS)
{
AutoLoad();
GLOBAL_IMPORT();
DIV_export("post_process_buffer", post_process_buffer);
}
Y el programa de ejemplo en DIV:
program div_text_out_test;
import "print.dll";
begin
print("Hello, World!");
loop
frame;
end
end
Estoy teniendo problemas con la funcion exportada
div_text_out
, endiv.h
, en algunos proyectos de DLLs que estoy desarrollando para DIV Games Studio 2 vanilla. Doy por sentado que este repositorio contiene la misma version de la funcion.En algun caso esta funcion parece provocar algun memory leak y tumba el programa que usa la DLL, en la mayoria directamente la funcion no hace nada (no imprime texto en pantalla).
A falta de documentacion de
div.h
(que seria interesante documentar a detalle), entiendo que la funcion lo que hace es dibujar en la memoria de video el texto, y que no es necesario estar repintandola en cada frame ni mantener una variablestring
en el codigo del programa DIV (como usualmente requieren las funciones de texto de DIV). Igualmente he probado a llamar a la funcion dentro de un bucle y usando una cadena declarada en una variable en el codigo del programa de DIV.Dejo esta DLL de ejemplo:
Y el programa de ejemplo en DIV:
Implementacion de
div_text_out
en el repositorio: https://github.com/vii1/DIV/blob/e427accfb82cc27ad0469529e06a6f734c71b351/src/div32run/s.cpp#L1662