¿Cómo llamar a la función DLL con String Array y recibir datos de Double Array?Leí el contenido del estatuto 14 en la guía de secuencias de comandos e hice algunas pruebas sobre mi función C.
El archivo adjunto testdll.jsl funciona bien con datos simples, como AnsiString (dentro y fuera). En el registro puedo ver:
---
dll_obj = DLL("C:\Users\charlie.chu\Documentos\JMP\JSL\jmptest2.dll");
[CDECL] AnsiString testFunc(AnsiString);
resultado = "ABC";
---
Mi pregunta es, si quiero enviar datos como {"1.2, 2.3, 3.4", "5.6, 6.7, 7.8"} y finalmente recibir datos devueltos como {{1.2, 2.3, 3.4}, {5.6, 6.7, 7.8} }.¿Cómo debería hacer? No puedo encontrar un tipo de datos adecuado.
En el código C, la función strSplit se define con
doble ** strDividir ( carbonizarse ** strArray ) {
No puedo usar AnsiString, pero ObjPtr también falla.
PD: Descubrí que el código del lenguaje c no puede ser un archivo adjunto...
Automatización y secuencias de comandosLa personalización en masaventanasRe: ¿Cómo llamar a la función DLL con String Array y recibir datos de Double Array?Podrías tener algunos problemas mencionados aquí https://community.jmp.com/t5/Discussions/Does-anyone-know-about-TDMS-format-data-converting-into-JMP/mp/367590/highlight/true#M61750
Elemento de la lista de deseos Amplíe el soporte de matrices en las capacidades DLL de JMP más allá del doble
Re: ¿Cómo llamar a la función DLL con String Array y recibir datos de Double Array?Gracias. Entonces la conclusión es: hasta el momento no hay solución.
Intentaré enviar datos desde JMP con un socket TCPIP en lugar de llamar a la función DLL, obviamente será más lento...
Re: ¿Cómo llamar a la función DLL con String Array y recibir datos de Double Array?Tal vez intente volver a empaquetar sus argumentos antes de enviarlos a sus códigos C:
1) Una cadena larga, que es una concatenación de toda tu cadena.
2) Una matriz numérica, los elementos registran las longitudes de cadenas individuales o los desplazamientos de cadenas individuales
Y sus códigos C necesitan descomprimirlos.
Re: ¿Cómo llamar a la función DLL con String Array y recibir datos de Double Array?Si su objetivo es convertir su cadena en una lista de listas, puede hacerlo en JSL.Aquí hay dos enfoques:
// Given this string:
a = {"1.2, 2.3, 3.4", "5.6, 6.7, 7.8"};
// Return data like { {1.2, 2.3, 3.4} , {5.6, 6.7, 7.8} }
// Parse things apart
new_list = {};
m = 0;
for (i = 1, i <= nitems(a), i++,
one_list = words(a[i], ", ");
for (k = 1, k <= nitems(one_list), k++,
one_list[k] = num(one_list[k]);
);
m++;
new_list[m] = one_list;
);
print(new_list);
// Use matrix operators
exec_string = "new_mat = matrix({";
for (i = 1, i <= nitems(a), i++,
if (i == 1,
exec_string = exec_string || "{" || a[i] || "}";
,
exec_string = exec_string || ", {" || a[i] || "}";
);
);
exec_string = exec_string || "})";
eval(parse(exec_string));
print(new_mat);
El primero regresa:
{{1.2, 2.3, 3.4}, {5.6, 6.7, 7.8}}
El segundo devuelve una matriz:
[1.2 2.3 3.4, 5.6 6.7 7.8]