Java から DLL を呼び出し、日本語は _bstr_t で変換する

  目次







  Java_Cpp.java



  
public class Java_Cpp {

	static {
		System.loadLibrary("ForJava");
	}

	public native String printJapanese( String message );

	public static void main(String[] args) {

		Java_Cpp Native = new Java_Cpp();
		System.out.println(Native.printJapanese( "この文字列はC++側で表示" ));

	}
}
  



  Java_Cpp.cpp

参考リンク

  
#include <stdio.h>
#include "Java_Cpp.h"
#include <comdef.h>


JNIEXPORT jstring JNICALL Java_Java_1Cpp_printJapanese
  (JNIEnv *env, jobject jobj, jstring jstr)
{

	_bstr_t str;
	const jchar *ptr;

	// 一時的な文字列(UNICODE)を取得
	ptr = env->GetStringChars( jstr, NULL );

	// BSTR へセット
	str = (wchar_t*)ptr;

	// 一時的な文字列(UNICODE)を開放
	env->ReleaseStringChars( jstr, ptr );

	// Java からの文字列を表示
	printf("%s\n", (LPTSTR)str );

	// ここでの表示
	printf("日本語表示\n");

	// Java へ文字列を引き渡す
	str = "この日本語表示をJavaに渡す";
	return env->NewString((wchar_t*)str,str.length());
	
}
  



  【javah -classpath . Java_Cpp】 で作成された、ヘッダファイル

  
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Java_Cpp */

#ifndef _Included_Java_Cpp
#define _Included_Java_Cpp
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     Java_Cpp
 * Method:    printJapanese
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_Java_1Cpp_printJapanese
  (JNIEnv *, jobject, jstring);

#ifdef __cplusplus
}
#endif
#endif
  



  ビルド用バッチファイル

  
javac Java_Cpp.java
javah -classpath . Java_Cpp

Set Inc1=C:\Program Files\Java\jdk1.5.0_11\include
Set Inc2=C:\Program Files\Java\jdk1.5.0_11\include\win32
cl Java_Cpp.cpp -I"%Inc1%" -I"%Inc2%" -FeForJava.dll -MD -LD
  

※ -MD はマルチスレッド用である事を意味します



  実行

  
D:\Backup\PRODUCT\_MISC\multi_lang\JNI>java -cp . Java_Cpp
この文字列はC++側で表示
日本語表示
この日本語表示をJavaに渡す
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ