我现在使用JNI,想实现一个小功能。
在JAVA中定义了一个字符串
char[] x=new char[3];
x[0]='a';
x[1]='b';
x[2]='c'; 现在我想在C++里面实现两个功能,
1:读取x的内容并在C++里输出
2:修改x里的内容为x[0]='x',x[1]='y',x[2]='z'。 //函数格式
JNIEXPORT jlong JNICALL Java_T1210_Test_test_1x(JNIEnv *env, jobject obj)
{ jclass clazz_Native=env-> GetObjectClass(obj);
//此处不知道如何读取JAVA中的x[]数据
// 此处不知道如何设置JAVA中的x[]数据
return 1;
} 希望高手能帮忙帮我补上这个功能!
十分感谢!
在JAVA中定义了一个字符串
char[] x=new char[3];
x[0]='a';
x[1]='b';
x[2]='c'; 现在我想在C++里面实现两个功能,
1:读取x的内容并在C++里输出
2:修改x里的内容为x[0]='x',x[1]='y',x[2]='z'。 //函数格式
JNIEXPORT jlong JNICALL Java_T1210_Test_test_1x(JNIEnv *env, jobject obj)
{ jclass clazz_Native=env-> GetObjectClass(obj);
//此处不知道如何读取JAVA中的x[]数据
// 此处不知道如何设置JAVA中的x[]数据
return 1;
} 希望高手能帮忙帮我补上这个功能!
十分感谢!
解决方案 »
- java串口通信
- mysql读出照片,在JLabel显示上不出来
- 如何去掉websphere的ssl,不用https访问websphere??急!!急!!!!!!!!!!!!
- js..........................
- 可以为基于swt的java桌面应用程序设置系统的快捷键吗?
- string -> date的问题
- 菜鸟问题:参数的问题
- 求助:高手推荐几本java原版书!
- 使用WIN CVS时遇到的问题,请帮忙。。。。
- 做XML解析,list的add总是只有最后一个结果,解析的结果也有问题
- 截取字符串中特定字符的问题
- 大家好,第一次提问,希望能得到大家指点,RandomAccessFile文件的问题!虚心向大家请教!
#include "yxc_sap_mdapi_ManipulationDataAPI.h"
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <Winnls.h>
#include <string.h>
#include "caddialg.h"extern "C"char* jstringToWindows(JNIEnv* env,jstring jstr );
jstring windowsToJstring( JNIEnv* env, char* str );JNIEXPORT jstring JNICALL Java_yxc_sap_mdapi_ManipulationDataAPI_CreateMat(JNIEnv* env, jobject obj, jstring snd){
char sndstr[16500];
SAPHD hd;
char *rcvstr;
char *sapmes;
char *version;
char *retstr;
char *argv[1];
char* cha="CreateMat";
argv[0]=cha;
/* Connect: Parameters about SAP system, user name and password */
/* will be read in configuration file cadrfc.ini. */ //argc = argc; /* only for compiler purpose RM600 */ hd=SapVersi(&version);
//printf("SAP-CAD function library, interface version: %s\n",version);
//printf("-------------------------------------------------\n");
//printf("\n"); hd = SapConnc(argv,"","","","","","","",&sapmes); //printf("CONNC --- CPIC-RC=%ld\n",hd.cpicrc);
//printf("--------------------\n");
if (hd.cpicrc != 0){
//printf("Received CPIC-Error: %s\n\n",hd.cpicmes);
//exit(1);
strcpy(retstr,hd.cpicmes);
jstring jstr=windowsToJstring(env,retstr);
return jstr;
} char* chs=jstringToWindows(env,snd);
//printf(chs);
//printf("\n");
//char* chars1="13600008 1000 11MPARTtest-1007000 EA ND001005KP7910S001 活塞连杆总成 KG 20260 ";
//printf(chars1);
//printf("\n");
//创建物料
strcpy(sndstr,chs);
//strcpy(sndstr,"13600008 1000 11MPARTtest-1007000 EA ND001005KP7910S001 活塞连杆总成 KG 20260 ");
hd = SapMatcr("MR",sndstr,&rcvstr,&sapmes); //printf("MATRQ --- CPIC-RC=%ld\n",hd.cpicrc);
//printf("--------------------\n");
if (hd.cpicrc == 0) {
//printf("Sended Data: %s\n",sndstr);
//rcvstr[hd.datalen] = 0x0;
//printf("Received Data: %s\n",rcvstr);
//sapmes[hd.meslen] = 0x0;
//printf("Received Message: %s\n\n",sapmes);
strcpy(retstr,sapmes);
}
else {
//printf("Received CPIC-Error: %s\n\n",hd.cpicmes);
strcpy(retstr,hd.cpicmes);
jstring jstr=windowsToJstring(env,retstr);
return jstr;
//exit(1);
}
hd = SapDisco();
//printf("DISCO --- CPIC-RC=%ld\n",hd.cpicrc);
//printf("createMat is disconnect!"); jstring jstr=windowsToJstring(env,retstr);
return jstr;
}JNIEXPORT jstring JNICALL Java_yxc_sap_mdapi_ManipulationDataAPI_CreateBOM(JNIEnv* env, jobject obj, jstring header, jstring items){
char sndstr[16500];
SAPHD hd;
char *rcvstr;
char *sapmes;
//char *version;
char *retstr;
char *argv[1];
char* cha="CreateBOM";
argv[0]=cha;
//hd=SapVersi(&version);
hd = SapConnc(argv,"","","","","","","",&sapmes); if (hd.cpicrc != 0){
strcpy(retstr,hd.cpicmes);
jstring jstr=windowsToJstring(env,retstr);
return jstr;
} char* chs=jstringToWindows(env,header);
int length = env->GetStringLength(items);;
char* items1="";
if(length>0){
items1=jstringToWindows(env,items);
} //新建BOM
strcpy(sndstr,chs);
hd = SapBomcr("MP",sndstr,&rcvstr,&sapmes); if (hd.cpicrc != 0) {
strcpy(retstr,hd.cpicmes);
jstring jstr=windowsToJstring(env,retstr);
return jstr;
}
strcpy(sndstr,items1);
hd = SapBomcr("SP",sndstr,&rcvstr,&sapmes); if (hd.cpicrc == 0) {
strcpy(retstr,sapmes);
}
else {
strcpy(retstr,hd.cpicmes);
jstring jstr=windowsToJstring(env,retstr);
return jstr;
}
hd = SapDisco();
jstring jstr=windowsToJstring(env,retstr);
return jstr;
}///////////////////////////////////////////////////////////////////////////////
//辅助函数:char* jstringToWindows(JNIEnv* env,jstring jstr);
//功能:将Java的Unicode字符串转化成本地字符数组;
///////////////////////////////////////////////////////////////////////////////
char* jstringToWindows(JNIEnv* env,jstring jstr )
{
//AFX_MANAGE_STATE(AfxGetStaticModuleState());
int length = env->GetStringLength(jstr );
const jchar* jcstr = env->GetStringChars(jstr, 0 );
char* rtn = (char*)malloc( length*2+1 );
int size = 0;
size = WideCharToMultiByte( CP_ACP, 0, (LPCWSTR)jcstr, length, rtn, (length*2+1), NULL, NULL );
if( size <= 0 )
return NULL;
env->ReleaseStringChars(jstr, jcstr );
rtn[size] = 0;
return rtn;
}///////////////////////////////////////////////////////////////////////////////
//辅助函数:jstring windowsToJstring( JNIEnv* env, char* str )
//功能:将本地字符数组转化成Java的Unicode字符串;
///////////////////////////////////////////////////////////////////////////////
jstring windowsToJstring( JNIEnv* env, char* str )
{
//AFX_MANAGE_STATE(AfxGetStaticModuleState());
jstring rtn = 0;
int slen = strlen(str);
wchar_t* buffer = 0;
if( slen == 0 )
rtn = env->NewStringUTF(str); //UTF ok since empty string
else
{
int length = MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, NULL, 0 );
buffer = (wchar_t*)malloc( length*2 + 1 );
if( MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, (LPWSTR)buffer, length ) >0 )
rtn = env->NewString( (jchar*)buffer, length );
}
if( buffer )
free( buffer );
return rtn;
}太长,从中删除了一部分