C# C++ Java接口类型转换

  最近这几天做了一个兼职 ,主要是把C语言以及C#语言封装的dll,经过C++中转为Java语言支持的,主要其中的问题就是类型转换,在此列出常用类型的转换过程。

 1 #include "stdafx.h"
 2 #include <cstdlib>
 3 #include <cstdio>
 4 #include <iostream>
 5 #include "www_cnblogs_com\cyjwdm0503.h"
 6 #include <malloc.h>
 7 #include <Windows.h>
 8 
 9 using namespace std;
10 using namespace  System::Runtime::InteropServices;
11 using namespace  System;
12 
13 //char* ->c#
14 System::String^ charptrtoCstring( const char* str )
15 {
16     System::String^ str1  =  Marshal::PtrToStringAnsi((IntPtr)(char*)str);
17     return str1;
18 }
19 
20 
21 //C#->char*
22 char* Cstringtocharptr( System::String^ s )
23 {
24     char* buffer = (char*)(void*)Marshal::StringToHGlobalAnsi(s);
25     return buffer;
26 }
27 
28 
29 //jstring ->char*
30 char* jstringTocharptr( JNIEnv *env, jstring jstr )
31 { //UTF8/16转换成gb2312
32     int length = (env)->GetStringLength(jstr );
33     const jchar* jcstr = (env)->GetStringChars(jstr, 0 );
34     char* rtn = (char*)malloc( length*2+1 );
35     int size = 0;
36     size = WideCharToMultiByte( CP_ACP, 0, (LPCWSTR)jcstr, length, rtn,(length*2+1), NULL, NULL );
37     if( size <= 0 )
38         return NULL;
39     (env)->ReleaseStringChars(jstr, jcstr );
40     rtn[size] = 0;
41     return rtn;
42 }
43 
44 //char* ->jstring
45 jstring charptrTojstring( JNIEnv* env, const char* str )
46 {//gb2312转换成utf8/16
47     jstring rtn = 0;
48     int slen = strlen(str);
49     unsigned short * buffer = 0;
50     if( slen == 0 )
51         rtn = (env)->NewStringUTF(str );
52     else
53     {
54         int length = MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, NULL, 0 );
55         buffer = (unsigned short *)malloc( length*2 + 1 );
56         if( MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, (LPWSTR)buffer, length ) >0 )
57             rtn = (env)->NewString(  (jchar*)buffer, length );
58     }
59     if( buffer )
60         free( buffer );
61     return rtn;
62 }
63 
64 //jchar ->char
65 char jchartochar( jchar c )
66 {
67     char ch = (char)(c & 0x00ff);
68     return ch;
69 }
70 
71 //char* ->jchar
72 jchar charTojchar( char c )
73 {
74     jchar ch = (jchar)(c | 0xff00);
75     return ch;
76 }
77 
78 //char ->C#
79 System::Char chartoChar( char c )
80 {
81     System::Char C = (System::Char)((int)(c));
82     return C;
83 }
84 
85 //C#->char
86 char Chartochar( System::Char c )
87 {
88     char C = (char)((int)(c));
89     return C;
90 }

 增加修改java对象内部成员变量的方法

1 void SetjstringField( JNIEnv* env,jobject o, const char* fieldID, const char* value )
2 {
3     jclass cls = env->GetObjectClass(o);
4     jfieldID reInfo = env->GetFieldID(cls,fieldID,
5 "Ljava/lang/String;");
6     jstring re = charptrTojstring(env,value);
7     env->SetObjectField(o,reInfo,re);
8 }

 

转载于:https://www.cnblogs.com/cyjwdm0503/p/4763986.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值