powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JNI+.NET
5 сообщений из 5, страница 1 из 1
JNI+.NET
    #33416650
сэр Эдуард
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В DLL получаю объект класса System::String, как мне его преобразовать в jstring? Или каким способом можно вернуть эту строку в Java-класс?
...
Рейтинг: 0 / 0
JNI+.NET
    #33417428
сэр Эдуард
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сам решил, забил на строки и использовал массив byte. Вот пример:
Кусочек JAVA

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
     private   native   static   byte [] getUserName(String login, String password);

     public   static  String auth(String login, String password){
         byte [] b = getUser(login, password);
         if  (b== null )  return   null ;
         try {
             return   new  String(b,"UTF-8");
        } catch (UnsupportedEncodingException e){
             return   "<noname>";
        }
    }


Кусочек C++
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
JNIEXPORT jbyteArray JNICALL Java_Auth_getUser
(JNIEnv *env, jclass cls, jstring login, jstring password){

	 const   char  *login_str = env->GetStringUTFChars(login,  0 );
	 const   char  *password_str = env->GetStringUTFChars(password,  0 );

	DataTable *dTable =  new  DataTable();
	
	
	dTable = <getUserInfo(login,password)>

	env->ReleaseStringUTFChars(login, login_str);
	env->ReleaseStringUTFChars(password, password_str);

	DataRow *rows[] = dTable->Select();
	
	 if  (rows->Length== 0 ) 
		 return   NULL ;
	 else {
		System::String * name = dTable->Rows->get_Item( 0 )->get_Item("FIRSTNAME")->ToString();
		System::String * surn = dTable->Rows->get_Item( 0 )->get_Item("SURNAME")->ToString();
		
		System::String * fio = System::String::Concat(name," ",surn);
		
		 Char  chars[] = fio->ToCharArray();
		
		System::Text::Encoding * encoding = System::Text::Encoding::GetEncoding("UTF-8");
		System::Text::Encoder * enc = encoding->GetEncoder();
		
		 int  byteCount = enc->GetByteCount(chars, 0 ,chars->get_Length(),true);

		 Byte  bytes[] =  new   Byte [byteCount];

		enc->GetBytes(chars, 0 ,chars->get_Length(),bytes, 0 ,true);

		jbyteArray jbytes = env->NewByteArray(byteCount);
		jbyte * jb = env->GetByteArrayElements(jbytes,false);
		
		 for ( int  i= 0 ; i<byteCount; i++) jb[i] = bytes[i];
		
		env->SetByteArrayRegion(jbytes, 0 ,byteCount,jb);

		 return  jbytes;
	}


...
Рейтинг: 0 / 0
JNI+.NET
    #33417434
сэр Эдуард
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я не знаток .NET так что сильно не критикуйте, если кто знает как красивее - пишите!!!
...
Рейтинг: 0 / 0
JNI+.NET
    #33515383
Mr. GES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так, на всякий случай код для MC++

Код: plaintext
1.
2.
3.
4.
JNIEnv* env =  0 ;
System::String* cString = "blabla";
jstring JStr = 
env->NewStringUTF(( char *)( void *)Marshal::StringToHGlobalAnsi(cString))
...
Рейтинг: 0 / 0
JNI+.NET
    #33516937
Urt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr. GESТак, на всякий случай код для MC++

Код: plaintext
1.
2.
3.
4.
JNIEnv* env =  0 ;
System::String* cString = "blabla";
jstring JStr = 
env->NewStringUTF(( char *)( void *)Marshal::StringToHGlobalAnsi(cString))


Круто! Вот как налаживается взаимодействие двух инородных сред - Java и .Net :-)))))
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JNI+.NET
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]