Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JNI+.NET / 5 сообщений из 5, страница 1 из 1
05.12.2005, 11:28
    #33416650
сэр Эдуард
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JNI+.NET
В DLL получаю объект класса System::String, как мне его преобразовать в jstring? Или каким способом можно вернуть эту строку в Java-класс?
...
Рейтинг: 0 / 0
05.12.2005, 15:11
    #33417428
сэр Эдуард
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JNI+.NET
Сам решил, забил на строки и использовал массив 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
05.12.2005, 15:12
    #33417434
сэр Эдуард
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JNI+.NET
Я не знаток .NET так что сильно не критикуйте, если кто знает как красивее - пишите!!!
...
Рейтинг: 0 / 0
01.02.2006, 11:26
    #33515383
Mr. GES
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JNI+.NET
Так, на всякий случай код для MC++

Код: plaintext
1.
2.
3.
4.
JNIEnv* env =  0 ;
System::String* cString = "blabla";
jstring JStr = 
env->NewStringUTF(( char *)( void *)Marshal::StringToHGlobalAnsi(cString))
...
Рейтинг: 0 / 0
01.02.2006, 17:34
    #33516937
Urt
Urt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JNI+.NET
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
Форумы / Java [игнор отключен] [закрыт для гостей] / JNI+.NET / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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