C++ и Java: совместное использование
Страница 6. Правила формирования имени С/С -функции


Правила формирования имени С/С++-функции

Имя С/С++-функции формируется путем последовательного соединения следующих компонентов:

  • префикс 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);

Рассмотрим типы параметров, которые получает на входе С/С++-функция при ее вызове.

 
« Предыдущая статья   Следующая статья »