私は次のC関数を持っています:
int read(int dev, void* buffer, unsigned int count)
これは通常、次のように C で呼び出されます。
read(data->dev, data->buffer, 32000);
data は構造体で、次のものがあります。
typedef struct {
ssize_t dev;
char buffer[32000];
} DATA;
そして、これを次のようにjnaを使用してJavaに変換しました。
public class Data{//not neccesary to extends of Structure, because is only used to package both variables together
public int dev;
public byte[] buffer;//in the constructor of the class set to 32000 elements
}
int read(int playdev, Buffer buffer, int count);
//clib is the class to connect with de C library
ByteBuffer bf = ByteBuffer.wrap(data.buffer);
clib.read(data.dev, bf , READ_SIZE);
そして、「clib.read」を実行すると、「java.lang.Error: Invalid memory access」というメッセージが表示されます
このエラーを処理する方法はありますか???
私は次のことを試みました: int vox_playstr_read(int playdev, Pointer buffer, int count);
と
ByteBuffer bf = ByteBuffer.wrap(data.buffer);
Pointer pbuf = Native.getDirectBufferPointer(bf);
clib.read(data.dev, pbuf, READ_SIZE);
同じ結果が得られます。
それを機能させるためのアイデアはありますか?