/* _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ 縲先ゥ溯�讎りヲ√� : Java險隱槭い繝励Μ逕ィ繝サ蜈ア譛峨Γ繝「繝ェ繧「繧ッ繧サ繧ケSR��JNI繝ゥ繝�ヱ繝シ�� 螳滄圀縺ョ蜈ア譛峨Γ繝「繝ェ繧「繧ッ繧サ繧ケ縺ョ螳溯」�� GG_SHM0011 縺ァ縺ゅj縲∵悽繧「繝励Μ縺ッ Java險隱槭→C++險隱槭�繧、繝ウ繧ソ繝シ繝輔ぉ繝シ繧ケ驛ィ蛻�r螳溯」�@縺ヲ縺�k 縲蝉ス懈�譌・縲� : 2021.04.23 縲仙他蜃コ蠖「蠑�1縲� : ShmStaticTable.SHM0001 ( byte[] in # 蜷�ヱ繝ゥ繝。繝シ繧ソ繧貞�蜉幢シ医ヱ繝ゥ繝。繝シ繧ソ萓九�莉・荳九―n繧ウ繝シ繝牙玄蛻�j�� # 繝��繝悶ΝID / 讀懃エ「ID / key1 / value1 / key2 / value2 �・�・�・ ) 縲先綾繧雁、1縲� : int # 繝��繧ソ蜿門セ嶺サカ謨ー縲ゆス�@縲√�繧、繝翫せ蛟、縺ッ繧ィ繝ゥ繝シ繧ウ繝シ繝� 縲仙他蜃コ蠖「蠑�2縲� : ShmStaticTable.SHM0001getData ( byte[] out # 霑泌唆繝��繧ソ譬シ邏埼�伜沺繧呈欠螳夲シ亥推陦後�\n蛹コ蛻�j�� # �題。檎岼:鬆�岼蜷搾シ�\t蛹コ蛻�j�峨�シ定。檎岼莉・髯�:繝��繧ソ蛟、��\t蛹コ蛻�j�� ) 縲先綾繧雁、2縲� : void # 縺ェ縺� _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ */ #include <string.h> #include <stdio.h> #include <sys/syscall.h> #include "GG_SHMCOM.h" #include "com_galaxygoby_ShmStaticTable.h" int GG_SHM0011_logic( int prmNum, char Prm[][ GG_SHM0001_MaxPrmLen ] ) ; void GG_SHM0011_getData ( char *arrOut ) ; /* _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ 蜈ア譛峨Γ繝「繝ェ繝��繧ソ讀懃エ「蜃ヲ逅� GG_SHM0011_logic��C++險隱橸シ峨r蜻シ縺ウ蜃コ縺励※縲∝�譛峨Γ繝「繝ェ繝��繧ソ縺ョ讀懃エ「繧定。後≧縲� Java縺九i蜿嶺ソ。縺励◆byte繝��繧ソ繧団har驟榊�縺ォ蛻�屬縺励※蜻シ縺ウ蜃コ縺励r螳溯。後� _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ */ JNIEXPORT jint JNICALL Java_com_galaxygoby_ShmStaticTable_SHM0001 (JNIEnv *env, jobject obj, jbyteArray in ) { int prmNum ; // 繝代Λ繝。繝シ繧ソ謨ー char Prm [ GG_SHM0001_MaxPrmNum ][ GG_SHM0001_MaxPrmLen ] ; // 繝代Λ繝。繝シ繧ソ char *savepoint ; // strtok_r逕ィsavepoint char szLogFileTmpPath [ MAX_PATH ] ; // XML繝輔ぃ繧、繝ォ蜷� char g_szLogFilePath [ MAX_PATH ] ; // 繝ュ繧ー繝輔ぃ繧、繝ォ蜷� char szAccessDate [ 30 ] ; // YYYY-MM-DD HH:MM:SS.mmmmmm int ThreadId = (int)syscall(SYS_gettid) ; // 繧ケ繝ャ繝�ラID縺ョ蜿門セ� // 繝ュ繧ー蜃コ蜉帛�エ謇縺ョ豎コ螳� getEnvString ( szLogFileTmpPath , "GG_LogFileName" , GG_SHM0011_LOGPATH , sizeof(szLogFileTmpPath) ); getLocalTimeString ( g_szLogFilePath , sizeof(g_szLogFilePath) , szLogFileTmpPath ) ; jbyte* arrIn = env->GetByteArrayElements(in,NULL); // jbyteArray蝙銀�jbyte蝙九↓螟画鋤 int nSize = env->GetArrayLength(in); // 繝��繧ソ髟キ蜿門セ� arrIn[nSize-1] = '\0' ; // 繧ケ繝医ャ繝代�險ュ螳� /* _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ strtok_r繧剃スソ逕ィ縺励※縲゛ava縺ョ蜈・蜉帙ヱ繝ゥ繝。繝シ繧ソ��\n蛹コ蛻�j�峨rGG_SHM0011_logic逕ィ縺ョ 繝代Λ繝。繝シ繧ソ蠖「蠑擾シ�int prmNum, char Prm[]�峨↓螟画鋤 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ */ char *tp ; for ( prmNum = 1 ;; prmNum++ ) { if ( prmNum == 1 ) { tp = strtok_r ( (char *)arrIn , "\n" , &savepoint ) ; } else { tp = strtok_r ( NULL , "\n" , &savepoint ) ; } if ( tp != NULL ) { strcpy ( Prm[prmNum] , tp ) ; getLocalTimeString ( szAccessDate , sizeof(szAccessDate), "%Y/%m/%d %H:%M:%S.%U" ) ; GG_MsgOut ( g_szLogFilePath , 9 , "(%05d) **** ( %s ) **** 蜈・蜉帙ヱ繝ゥ繝。繝シ繧ソ Prm[%d] = [%s] ****" , ThreadId , szAccessDate , prmNum , Prm[prmNum] ) ; } else { prmNum -- ; break ; } } // 繝ュ繧ー蜃コ蜉� getLocalTimeString ( szAccessDate , sizeof(szAccessDate), "%Y/%m/%d %H:%M:%S.%U" ) ; GG_MsgOut ( g_szLogFilePath , 9 , "(%05d) **** ( %s ) **** 蜈・蜉帙ヱ繝ゥ繝。繝シ繧ソ謨ー prmNum = [ %d ]" , ThreadId , szAccessDate , prmNum ) ; int ret = GG_SHM0011_logic( prmNum, Prm ) ; // 蜈ア譛峨Γ繝「繝ェ讀懃エ「蜃ヲ逅�r螳溯。� env->ReleaseByteArrayElements(in, arrIn, 0); // arrIn 繧定ァ」謾セ return ( ret ) ; // 蜿門セ励ョ繝シ繧ソ髟キ繧定ソ泌唆 } /* _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ 蜈ア譛峨Γ繝「繝ェ繝��繧ソ蜿門セ怜�逅� GG_SHM0011_getData��C++險隱橸シ峨r蜻シ縺ウ蜃コ縺励※縲∝�譛峨Γ繝「繝ェ繝��繧ソ縺ョ蜿門セ励r陦後≧縲� GG_SHM0011_logic��C++險隱橸シ峨〒讀懃エ「繝��繧ソ髟キ縺梧アコ螳壹@縺ヲ縺�k縺ョ縺ァ縲∽ク贋ス阪�Java繧「繝励Μ 縺檎畑諢上@縺滄�伜沺��out�峨↓蜿門セ励ョ繝シ繧ソ繧定ソ泌唆縺吶k _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ */ JNIEXPORT void JNICALL Java_com_galaxygoby_ShmStaticTable_SHM0001getData (JNIEnv *env, jobject obj, jbyteArray out ) { jbyte* arrOut = env->GetByteArrayElements(out,NULL); GG_SHM0011_getData ( (char *)arrOut ) ; /* getEnvString ( szLogFileTmpPath , "GG_LogFileName" , GG_SHM0011_LOGPATH , sizeof(szLogFileTmpPath) ); getLocalTimeString ( g_szLogFilePath , sizeof(g_szLogFilePath) , szLogFileTmpPath ) ; getLocalTimeString ( szAccessDate , sizeof(szAccessDate), "%Y/%m/%d %H:%M:%S.%U" ) ; GG_MsgOut ( g_szLogFilePath , 9 , "(%05d) **** ( %s ) **** 蜃コ蜉帙ヱ繝ゥ繝。繝シ繧ソ out=[%s] ****" , ThreadId , szAccessDate , (char *)arrOut ) ; */ env->ReleaseByteArrayElements(out, arrOut, 0); // arrOut縺ョ隗」謾セ }