Comment appeler la fonction DLL avec String Array et recevoir des données Double Array ?J'avais lu le contenu de la charte 14 dans le guide de script et fait quelques tests sur ma fonction C.
La pièce jointe testdll.jsl fonctionne très bien avec des données simples, comme AnsiString (entrée et sortie). Dans le log, je vois :
---
dll_obj = DLL("C:\Users\charlie.chu\Documents\JMP\JSL\jmptest2.dll");
[CDECL] AnsiString testFunc(AnsiString);
résultat = "ABC" ;
---
Ma question est la suivante : si je veux envoyer des données telles que {"1.2, 2.3, 3.4", "5.6, 6.7, 7.8"}, et enfin recevoir les données de retour telles que { {1.2, 2.3, 3.4} , {5.6, 6.7, 7.8} }.Comment dois-je faire? Je ne trouve pas de type de données approprié.
Dans le code C, la fonction strSplit est définie avec
double ** strSplit ( carboniser ** strArray ) {
Je ne peux pas utiliser AnsiString, mais ObjPtr échoue également.
PS : j'ai trouvé que le code du langage C ne peut pas être un fichier joint.....
Automatisation et scriptsPersonnalisation de masseles fenêtresRe : Comment appeler la fonction DLL avec String Array et recevoir des données Double Array ?Vous pourriez rencontrer certains problèmes mentionnés ici https://community.jmp.com/t5/Discussions/Does-anyone-know-about-TDMS-format-data-converting-into-JMP/mp/367590/highlight/true#M61750
Article de la liste de souhaits Étendre la prise en charge des tableaux dans les capacités DLL de JMP au-delà du double
Re : Comment appeler la fonction DLL avec String Array et recevoir des données Double Array ?Merci. La conclusion est donc la suivante : aucune solution pour l’instant.
Je vais essayer d'envoyer des données depuis JMP avec le socket TCPIP au lieu d'appeler la fonction DLL, ce sera évidemment plus lent...
Re : Comment appeler la fonction DLL avec String Array et recevoir des données Double Array ?Essayez peut-être de reconditionner vos arguments avant de les envoyer à vos codes C :
1) Une longue chaîne, qui est une concaténation de toutes vos chaînes
2) Un tableau numérique, les éléments enregistrent soit les longueurs de chaînes individuelles, soit les décalages de chaînes individuelles
Et vos codes C doivent les décompresser.
Re : Comment appeler la fonction DLL avec String Array et recevoir des données Double Array ?Si votre objectif est de convertir votre chaîne en une liste de listes, vous pouvez le faire en JSL.Voici deux approches :
// 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);
Le premier renvoie :
{{1.2, 2.3, 3.4}, {5.6, 6.7, 7.8}}
Le second renvoie une matrice :
[1.2 2.3 3.4, 5.6 6.7 7.8]