Stack error means that the program's guess at the bottom of the stack
was wrong and the stackpointer dipped below that guess.
JInit() has to be called to begin with, and IIUC Jqt calls JSM() (in
io.c) to set the stack pointer.
Email me directly if you want help tracing through execution.
Henry Rich
On 3/5/2022 5:35 PM, vadim wrote:
I'm considering to move a working program (which loads j.dll) from J
version 8.07 to current 9.03, but JDo fails to execute any sentence.
(1) No issues with the previous 8.07 version.
(2) No issues on Linux.
(3) No issues with JInit, JFree, JSetM, JGetM.
(4) To confuse things more, no issues with calling JDo from 9.03 JQt
window, e.g.:
libj =: 'jj.dll'
p =: (libj, ' JInit x') cd ''
(libj, ' JDo i x *c') cd p, <'A =: i. 2 3'
+-+-------------+-----------+
|0|2534909943808|A =: i. 2 3|
+-+-------------+-----------+
(5) Return code 17 when called from, e.g., the following C program,
compiled with mingw gcc (real program uses FFI and is not C).
#include <windows.h>
#include <stdio.h>
typedef void* (_stdcall *JInitType)(void);
typedef int (_stdcall *JDoType)(void*, LPSTR);
int main(void) {
HINSTANCE hinstLib;
JInitType JInit;
JDoType JDo;
void *j;
int result;
// hinstLib = LoadLibrary("C:\\Users\\vadim\\j64-807\\bin\\j.dll");
hinstLib = LoadLibrary("C:\\Users\\vadim\\j903\\bin\\j.dll");
JInit = (JInitType) GetProcAddress(hinstLib, "JInit");
JDo = (JDoType) GetProcAddress(hinstLib, "JDo");
j = (JInit)();
printf("%u\n", j);
result = (JDo)(j, "vec =: i. 10");
printf("%u\n", result);
return 0;
}
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm
--
This email has been checked for viruses by AVG.
https://www.avg.com
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm