나는 스크립팅 가이드에서 Charter 14의 내용을 읽고 C 기능에 대해 몇 가지 테스트를 수행했습니다.
첨부 파일 testdll.jsl은 AnsiString(in 및 out)과 같은 간단한 데이터에서 잘 작동합니다. 로그에서 다음을 볼 수 있습니다.
---
dll_obj = DLL("C:\Users\charlie.chu\Documents\JMP\JSL\jmptest2.dll");
[CDECL] AnsiString testFunc(AnsiString);
결과 = "ABC";
---
제 질문은 {"1.2, 2.3, 3.4", "5.6, 6.7, 7.8"}과 같은 데이터를 보내고 마지막으로 {{1.2, 2.3, 3.4}, {5.6, 6.7, 7.8} }.어떻게 해야 하나요? 적합한 데이터 유형을 찾을 수 없습니다.
C 코드에서 strSplit 함수는 다음과 같이 정의됩니다.
더블 ** strSplit ( 숯 ** strArray ) {
AnsiString을 사용할 수 없는데 ObjPtr도 실패합니다.
추신: c 언어 코드는 첨부 파일이 될 수 없다는 것을 알았습니다.....
감사해요. 따라서 결론은: 아직까지 해결책이 없습니다.
DLL 함수를 호출하는 대신 TCPIP 소켓을 사용하여 JMP에서 데이터를 보내려고 하는데 확실히 속도가 느려질 것입니다...
C 코드로 보내기 전에 인수를 다시 패키징해 보세요.
1) 모든 문자열을 연결한 긴 문자열
2) 숫자 배열, 요소는 개별 문자열의 길이 또는 개별 문자열의 오프셋을 기록합니다.
그리고 C 코드는 압축을 풀어야 합니다.
문자열을 목록의 목록으로 변환하는 것이 목표라면 JSL에서 이를 수행할 수 있습니다.다음은 두 가지 접근 방식입니다.
// 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);
첫 번째는 다음을 반환합니다.
{{1.2, 2.3, 3.4}, {5.6, 6.7, 7.8}}
두 번째는 행렬을 반환합니다.
[1.2 2.3 3.4, 5.6 6.7 7.8]