Страница 6 из 9 Правила формирования имени С/С++-функции Имя С/С++-функции формируется путем последовательного соединения следующих компонентов: - префикс JAVA_;
- полное квалифицированное имя класса;
- символ подчеркивания ("_");
- имя метода;
- для перегружаемых (OVERLOADED) методов - два символа подчеркивания ("_ _") с последующей сигнатурой метода.
Использование имен с сигнатурой на конце необходимо только в случае перегрузки двух или более собственных методов (перегрузка с обычным методом не важна, так как обычные методы не будут находиться в создаваемой библиотеке, что, однако, не допускает наличия собственного и обычного метода с одинаковыми именами и сигнатурами). Для соответствия лексиграфическим правилам С/С++ и использования UNICODE-кодировки, применяются дополнительные правила преобразования, представленные в табл. 2. Таблица 2 Исходный символ | Результирующая последовательность | "_" | _1 | ";" | _2 | "[" | _3 | символ UNICODE с кодом ХХХХ | _0ХХХХ | Ниже приведен пример JAVA-класса с собственными методами: PACKAGE TESTPACKAGE; ABSTRACT CLASS TEST { PUBLIC NATIVE VOID M1(STRING[] SA, OBJECT O, INT[][] IA2); PUBLIC NATIVE FLOAT[] M1(DOUBLE D, TEST T); PUBLIC NATIVE TEST M3(INT I); } и соответствующие им имена С/С++-функций: JNIEXPORT VOID JNICALL JAVA_TESTPACKAGE_TEST_M1___3LJAVA_LANG_STRING_2LJAVA_LANG_OBJECT_2_3_3I (JNIENV *, JOBJECT, JOBJECTARRAY, JOBJECT, JOBJECTARRAY); JNIEXPORT JFLOATARRAY JNICALL JAVA_TESTPACKAGE_TEST_M1__LJAVA_LANG_DOUBLE_2LTESTPACKAGE_TEST_2 (JNIENV *, JOBJECT, JOBJECT, JOBJECT); JNIEXPORT JOBJECT JNICALL JAVA_TESTPACKAGE_TEST_M3 (JNIENV *, JOBJECT, JINT); Рассмотрим типы параметров, которые получает на входе С/С++-функция при ее вызове. |