Widze ze niektorzy sie madrza i glupio odpisuja jak zapytalem ile bitow ma typ unsigned char w C. Ja pisze w Javie i wiem, ze zakres zmiennych w jezyku Java jest odgornie ustalony. Inaczej jest w przypadku programów C i C++ ktore uzywaja typow liczbowych najbardziej efektownych dla danego procesora...
Reasumujac pisze teraz program w Javie gdzie musze skorzystac z JNI i kilku funkcji napisanych w c++. Czy ktos uzywal kiedys xFunction i moze mi powiedziec co jest nie takz moim kodem???
Otrzymuje taki blad:

Exception in thread "main" com.excelsior.xFunction.IllegalSignatureException: Il
legal type to make an Argument: byte
at com.excelsior.xFunction.xFunction.parseSignature(xFunction.java:209)
at com.excelsior.xFunction.xFunction.<init>(xFunction.java:30)
at Start.main(Start.java:7)
a moje pliki wygladaja nastepujaco:

defdll.h:
#define GXAPI extern "C" __declspec(dllimport)
GXAPI BOOL WINAPI GxSetEachAmp(UINT nCh, GX_EACHAMP* pAmp);

typedef struct {
 
	BYTE		range;
	BYTE		sample;
	BYTE		use;
	BYTE		misc1;
	WORD		misc2;
	WORD		misc3;
	double		xpc;
 
} GX_EACHAMP;

#define BYTE unsigned char
#define WORD unsigned short
#define BOOL bool



Start.java:

import com.excelsior.xFunction.*;
 public class Start
 {
 	public static void main(String[] args) throws xFunctionException
 	{
		xFunction GxSetEachAmp = new xFunction("Gx02", "int GxSetEachAmp(int,GX_EACHAMP*)");
  		GX_EACHAMP Gx_EachAmp = new GX_EACHAMP();
 
		//GxSetEachAmp
 		Gx_EachAmp.range = 0;
 		Gx_EachAmp.sample = 6;
 		Gx_EachAmp.use = 0;
 		Gx_EachAmp.misc1 = 8;
 		Gx_EachAmp.misc2 = 3;
 		Gx_EachAmp.misc3 = 0;
 		Gx_EachAmp.xpc = 2.1;
 		
		int Gx_SetEachAmp_result = ((Integer)GxSetEachAmp.invoke(new Argument(0),Pointer.createPointerTo(Gx_EachAmp))).intValue();
	}
}



GX_EACHAMP.java:

import com.excelsior.xFunction.*;
 
class GX_EACHAMP extends Structure
{
	byte range;		// Range information
	byte sample;		// Sampling frequency information
	byte use;			// Channel ON/OFF information
	short misc1;		// Other information 1
	short misc2;		// Other information 2
	short misc3;		// Other information 3
	double xpc;		// Coefficient information 	(write only)
 
	public String defineLayout()
	{
		return "byte range, byte sample, byte use, short misc1, short misc2, short misc3, double xpc";
	}
	public GX_EACHAMP() {}
}

Czy ktos ma jakis pomysl?