1. 자바 --> C 또는 C++로 문자열 변환                                       
package 패키지;
class 클래스 {
   public static native void 메쏘드(String 문자열아규먼트);
}
를 javah로 C 헤더파일로 뽑아내게 되면 다음과 같은 C 프로토타입 정의를 얻게된다.
JNIEXPORT void JNICALL Java_패키지_클래스_메쏘드(JNIEnv *env, jclass obj, jstring 문자열아규먼트);
그럼.. C (또는 C++)에서는 다음과 같이 문자열을 읽을 수 있다.
char sbuf[512];                        // 문자열을 담을 버퍼 준비
memset(sbuf, 0, sizeof(sbuf)/sizeof(sbuf[0]));  // 버퍼를 null로 설정
const char *pch = (const char *)env->GetStringUTFChars(문자열아규먼트, 0);  // 문자열아규먼트
sprintf (sbuf,"%s", pch);          // 문자열을 버퍼에 카피
env->ReleaseStringUTFChars(문자열아규먼트, pch);    // 종료..
이제 printf ("%s", sbuf) 를 하게 되면 자바에서 넘겨준 문자열을 C에서 출력할 수 있다..


2. 반대의 경우 C --> Java로 문자열을 넘겨줄때에는                    
jstring retval;
retval = env->NewStringUTF(sbout);
return retval;
하면 된다.
하지만, 문제는 윈도우즈에서는 한글이 깨져서 넘겨지게 된다.
(최소한 제 경우 그럼)
그래서, 윈도우즈에서는 조금 다른 방식으로 처리해야 한다.
즉, 먼저 윈도우즈 API로 직접 유니코드 문자열로 바꾼다음, 직접 이 유니코드 문자열을
넘겨야 한다.
방법은 다음과 같다.
   jchar sbuf2[512];
   int size = MultiByteToWideChar(CP_ACP, 0, sbuf, strlen(sbuf) + 1, sbuf2, 512);
   retval = env->NewString (sbuf2, size);
이렇게 하면, 아무 문제 없이 한글지원이 된다.
MultiByteToWideChar()에 대한 자세한 문서는 msdn에서 찾아보자..

AND