VC实现java定义的接口的一些方法
2012-05-07 10:19
537 查看
用java的javah生成的c头文件
c的实现方法
J***A调用C++dll的方法
c++头文件
com_softeem_interImpl_CInterImpl.h
C++源文件
java调用C++dll部分
/* DO NOT EDIT THIS FILE - it is machine generated */ #include "jni.h" /* Header for class com_softeem_test_TestNative */ #ifndef _Included_com_softeem_test_TestNative #define _Included_com_softeem_test_TestNative #ifdef __cplusplus extern "C" { #endif /* * Class: com_softeem_test_TestNative * Method: sayHello * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_com_softeem_test_TestNative_sayHello (JNIEnv *, jobject, jstring); /* * Class: com_softeem_test_TestNative * Method: getHello * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_softeem_test_TestNative_getHello (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif
c的实现方法
// MYDLL.cpp: implementation of the CMYDLL class. // ////////////////////////////////////////////////////////////////////// //#include "MYDLL.h" #include <iostream> #include <windows.h> using namespace std; #include "com_softeem_test_TestNative.h" /** 第一个参数是虚拟机的环境指针 第二个参数为待转换的Java字符串定义 第三个参数是本地存储转换后字符串的内存块 第三个参数是内存块的大小 */ int JStringToChar(JNIEnv *env, jstring str, LPTSTR desc, int desc_len) { int len = 0; if(desc==NULL||str==NULL) return -1; wchar_t *w_buffer = new wchar_t[1024]; ZeroMemory(w_buffer,1024*sizeof(wchar_t)); wcscpy(w_buffer,env->GetStringChars(str,0)); env->ReleaseStringChars(str,w_buffer); ZeroMemory(desc,desc_len); len = WideCharToMultiByte(CP_ACP,0,w_buffer,1024,desc,desc_len,NULL,NULL); if(len>0 && len<desc_len) desc[len]=0; delete[] w_buffer; return strlen(desc); } /* * Class: com_softeem_test_TestNative * Method: sayHello * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_com_softeem_test_TestNative_sayHello (JNIEnv *env, jobject, jstring str) { TCHAR t_name[128]; JStringToChar(env,str,t_name,sizeof(t_name)); // ::MessageBox(NULL,"Hello,JNI!","Hello,JNI!",MB_OK); Sleep(5000); printf("%s",t_name); } /* * Class: com_softeem_test_TestNative * Method: getHello * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_softeem_test_TestNative_getHello (JNIEnv *env, jobject) { char str[]="Fuck the world"; return env->NewStringUTF(str); }
J***A调用C++dll的方法
c++头文件
com_softeem_interImpl_CInterImpl.h
/* DO NOT EDIT THIS FILE - it is machine generated */ #include "jni.h" /* Header for class com_softeem_interImpl_CInterImpl */ #ifndef _Included_com_softeem_interImpl_CInterImpl #define _Included_com_softeem_interImpl_CInterImpl #ifdef __cplusplus extern "C" { #endif /* * Class: com_softeem_interImpl_CInterImpl * Method: turnleft * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_softeem_interImpl_CInterImpl_turnleft (JNIEnv *, jobject); /* * Class: com_softeem_interImpl_CInterImpl * Method: turnright * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_softeem_interImpl_CInterImpl_turnright (JNIEnv *, jobject); /* * Class: com_softeem_interImpl_CInterImpl * Method: turnback * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_softeem_interImpl_CInterImpl_turnback (JNIEnv *, jobject); /* * Class: com_softeem_interImpl_CInterImpl * Method: walkahead * Signature: (F)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_softeem_interImpl_CInterImpl_walkahead (JNIEnv *, jobject, jfloat); /* * Class: com_softeem_interImpl_CInterImpl * Method: walkbackon * Signature: (F)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_softeem_interImpl_CInterImpl_walkbackon (JNIEnv *, jobject, jfloat); /* * Class: com_softeem_interImpl_CInterImpl * Method: stop * Signature: ()V */ JNIEXPORT void JNICALL Java_com_softeem_interImpl_CInterImpl_stop (JNIEnv *, jobject); /* * Class: com_softeem_interImpl_CInterImpl * Method: play * Signature: (Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_softeem_interImpl_CInterImpl_play (JNIEnv *, jobject, jstring); /* * Class: com_softeem_interImpl_CInterImpl * Method: getsensorstate * Signature: (I)Z */ JNIEXPORT jboolean JNICALL Java_com_softeem_interImpl_CInterImpl_getsensorstate (JNIEnv *, jobject, jint); /* * Class: com_softeem_interImpl_CInterImpl * Method: getrobotdirect * Signature: ()I */ JNIEXPORT jint JNICALL Java_com_softeem_interImpl_CInterImpl_getrobotdirect (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif
C++源文件
JNIEXPORT jstring JNICALL Java_com_softeem_interImpl_CInterImpl_turnleft (JNIEnv *env, jobject jobj) { char str[]="Fuck the world"; printf("%s",str); return env->NewStringUTF(str); }
java调用C++dll部分
package com.softeem.interImpl; public class CInterImpl { public native String turnleft(); static{ System.loadLibrary("SimpleDll"); } public static void main(String[] args) throws Exception { CInterImpl aa=new CInterImpl(); String aaa=aa.turnleft(); System.out.println(aaa); } }
相关文章推荐
- java包 + 接口的定义与实现接口抽象方法 + 并发视频
- Java接口定义与实现方法分析
- 14. JAVA 枚举(Enum、类集EnumMap&EnumSet 、实现接口、定义抽象方法) ----- 学习笔记
- Java中接口的定义与实现接口抽象方法
- Java中接口的定义与实现接口抽象方法
- Java中接口的定义与实现接口抽象方法
- Mono 继承一些特殊接口中带有 IJavaObject, IDisposable 接口的实现方法
- java - 实战 - 在接口中定义方法的实现
- Java实例 定义任务的一个发射小程序 实现Runnable接口并编写run()方法
- Mono 继承一些特殊接口中带有 IJavaObject, IDisposable 接口的实现方法
- Java中接口定义及实现接口的抽象方法
- 1)编写Animal接口,接口中声明run()方法; 2)定义Bird类和Fish类实现Animal接口; 3)编写Bird类和Fish类的测试程序,并调用其中的run()方法
- java中接口的定义与实现
- java中接口的定义和接口的实现
- 在VC中应用MSXML DOM 的一些基本实现方法
- java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类HashMap Hashtable LinkedHashMap 和TreeMap.
- java中接口的定义与实现
- java中接口的定义与实现
- java中接口的定义与实现
- [Java 10 泛型] 泛型通配符 Info<?> i = new Info<String>(); 在程序中定义没有方法的接口,称之为标识接口