1
が含まれていません:JNA。 char *それは私がにextern Cメソッドを持つDLLを持っている結果
extern "C" {
int ADAPTERSHARED_EXPORT full_hash(unsigned char* data,
uint64_t size,
int algorithm,
char* result,
int *res_size
);
}
Javaから呼び出し、このメソッド インタフェース
public interface CA extends Library {
CA INSTANCE = (CA) Native.loadLibrary(
(Platform.isWindows() ? "HashAdapterC" : "libHAL"), CA.class);
int full_hash(byte[] data, long size, int algorithm, String result, IntByReference res_size);
}
とmainメソッド
public static void main(String[] args) {
logger.debug("being started");
try {
CA lib = CA.INSTANCE;
String str = "1234567";
String res = "";
IntByReference in = new IntByReference(32);
byte[] data = str.getBytes();
int i = lib.full_hash(data, str.length(), 3, res, in);
logger.debug("result = " + res);
logger.debug("error = " + i);
return;
} catch (Exception e) {
e.printStackTrace();
logger.error("err");
return;
}
}
空の文字列の結果を呼び出した後C
unsigned char data[] = {
0xB1, 0x94, 0xBA, 0xC8, 0x0A, 0x08, 0xF5, 0x3B,
0x36, 0x6D, 0x00, 0x8E, 0x58
};
uint64_t size = sizeof(data);
int res_size = 32;
char* result = (char*)malloc(res_size);
int is_success = hash(data, size, 3, result, &res_size);
if (is_success == 0)
{
printf("Success\n");
int i;
for (i = 0; i < res_size; ++i)
{
printf("%X", (unsigned char)result[i]);
}
printf("\n");
}
からそれを呼び出す場合
は、私は結果の文字列を取得します。
is't char * - String?または私は別のタイプを使用しますか?
を結果を宣言する必要がありました;' DLLにあなたの文字列を渡すには、データを文字の配列に結果を受けなければなりません。それを 'String'に変換します。 JavaのString型は、[tag:c]がstringのための規則として使用するように、ヌルターミネータを持つcharの単純な配列ではありません。 – LPs
ありがとうLPsそれは本当に働いています) – 6azbljlb