// JNIjstring߂̓{l̓{lɂ{l̂߂̃CuBȂĂˁB
#include <jni.h>
#include "JCom.h"
#include "atlbase.h"
//#include "atlconv.h"
//------------------------------------------------------------------------------
// jstring Shift-JIS̕ɕϊB
// gp͖߂l free()邱
// ǂjstringnull-terminateł͂Ȃ炵BW2OLEW2AgȂ̂B
// ŁAW2OLEȂǂ̃}N̒gĂ݂ƁAWideCharToMultiByte()gĂB
// ́Anull-terminateȊOłg悤ɂłĂB
// jstrnull̂Ƃɂ́ANULLԂB̏ꍇ́A߂lfree()Kv͂ȂB
//------------------------------------------------------------------------------
char* jstring2sjis(JNIEnv *env, jstring jstr)
{
if(jstr==NULL) return NULL;
const jchar* jc = env->GetStringChars(jstr, NULL);
int len = env->GetStringLength(jstr);
char* sjis = (char*)malloc(len*2+1);
int bytes = WideCharToMultiByte(CP_ACP, 0, jc, len, sjis, len*2+1, NULL, NULL);
sjis[bytes] = '\0';
env->ReleaseStringChars(jstr, jc);
return sjis;
}
// gp͖߂l SysFreeString()邱
BSTR jstring2BSTR(JNIEnv *env, jstring jstr)
{
const jchar* jc = env->GetStringChars(jstr, NULL);
int len = env->GetStringLength(jstr);
BSTR bstr = SysAllocStringLen(jc, len);
env->ReleaseStringChars(jstr, jc);
return bstr;
}
// gp͖߂lEEEAȂĂ̂ȁH
// 쐬ɂul̊Ǘɓ̂ŁAfreereleaseKvȂH
jstring BSTR2jstring(JNIEnv *env, BSTR bstr)
{
int len = SysStringLen(bstr);
return env->NewString(bstr, len);
}
#if 0
//------------------------------------------------------------------------------
// jstring Shift-JIS̕ɕϊB
// gp͖߂l free()邱
// ǂjstringnull-terminateł͂Ȃ炵BW2OLEW2AgȂ̂B
// ŁAW2OLEȂǂ̃}N̒gĂ݂ƁAWideCharToMultiByte()gĂB
// ́Anull-terminateȊOłg悤ɂłĂB
//------------------------------------------------------------------------------
jstring sjis2jstring(JNIEnv *env, char* sjis)
{
int MultiByteToWideChar(
UINT CodePage, // code page
DWORD dwFlags, // character-type options
LPCSTR lpMultiByteStr, // address of string to map
int cchMultiByte, // number of characters in string
LPWSTR lpWideCharStr, // address of wide-character buffer
int cchWideChar // size of buffer
);
typedef OLECHAR *BSTR;
OLECHAR QoCgjR[ĥOI[
#endif
//------------------------------------------------------------------------------
// fobOp
void print_BSTR(OLECHAR* psz)
{
char bufA[256];
if(psz==NULL) { printf("(null)"); return; }
WideCharToMultiByte(CP_ACP, NULL, psz, -1, bufA, 256, NULL, NULL);
printf("%s", bufA);
}