Hola, he abierto un hilo en la seccin de SDK pero mi ingls no es muy bueno, por lo que voy a probar aqu resolver un par de dudas que tengo.
He logrado avanzar un poco pero estoy parado en un paso final. Os expongo el caso. Tengo un cdigo fuente en C estndar con el que genero una DLL (por ahora slo windows) y hasta aqu todo correcto. La DLL se genera bien y accedo a las funciones internas.
Pongo un esqueleto.
sample.h
[code]typedef double (*genann_actfun) (double a);
typedef struct genann {
int inputs, hidden_layers, hidden, outputs;
genann_actfun activation_hidden;
genann_actfun activation_output;
int total_weights;
int total_neurons;
double *weight;
double *output;
double *delta;
} genann;
extern __declspec(dllexport) int32_t DoubleValue(int32_t x); //dummy test…
extern __declspec(dllexport) const char *genann_version(void);
extern __declspec(dllexport) genann *genann_init(int inputs, int hidden_layers, int hidden, int outputs);
extern __declspec(dllexport) genann *genann_read(FILE *in);
extern __declspec(dllexport) void genann_randomize(genann *ann);[/code]
sample.c
const char *test_version(void) {
return "0.0.0";
}
testxojo *test_init(int x, int y, int z, double *delta) {
return NULL;
}
testxojo *test_read(FILE *file){
return NULL;
}
FILE *test_open(const char *filename) {
return NULL;
}
int test_write(const char *filename) {
return 0;
}
int test_close(FILE *file) {
return 0;
}
int test_free(testxojo *test) {
return 0;
}[/code]
Puntualizar que las funciones no hacen nada pero devuelven el tipo correcto.
... Y he logrado conectar con esta DLL en Xojo...
[code]Soft Declare Function test_version Lib "genann.dll" As CString
Soft Declare Function test_read Lib "genann.dll" (file As Ptr) As Ptr
Soft Declare Function test_open Lib "genann.dll" (name As CString) As Ptr
Soft Declare Function test_write Lib "genann.dll" (name As CString) As Ptr
Soft Declare Function test_close Lib "genann.dll" (file as Ptr) As Int32
Label1.Text = test_version()
Dim p As Ptr = test_open("C:\\XOJO\\FastMath\\data.txt")
Dim q As Ptr = test_read(p)
//------------------------------------------------
Dim g As testStruct = q.testStruct //<--- Is it correct or do I have to use a MemoryBlock ???
//------------------------------------------------
TextArea1.Text = Str(g.x) + "-" + Str(g.y) + "-" + Str(g.z)
Dim clos as Integer
clos = test_close(p)
He definido una estructura en Xojo de la forma:
x as integer
y as integer
z as integer
delta as Prt
Mi duda…
Es mas correcto gestionar la memoria en la parte de C (es decir, con malloc, por ejemplo) o es mejor gestionarla en la parte de Xojo?
Si es ms conveniente gestionar la memoria en la parte de Xojo entiendo que tengo que utilizar la clase MemoryBlock, correcto?
En ese caso cmo debo hacerlo? supongo que debo calcular la cantidad de memoria necesaria para gestionar la estructura y dimensionar el MemoryBlock pero cmo hago a partir de ah?