回调函数和注册回调函数的JNI接口该如何书写?

C++的函数代码如下,注册接口为cppfunction,回调函数为pFunc,其参数为PARA结构体。

 void cppfunction(void (*pFunc)(PARA*))

通过动态注册JNI的方式,cppfunction的函数签名该如何书写?直接将其参数标为jlong吗?
{“native_cppfunction”,"{jlong}V",""cppfunction}

对于回调函数的函数签名,其参数为自定义的结构体,在java中该如何传递到native?难道将一个个的成员拆开进行传递,在native进行拼接成PARA结构体,然后在调用pFunc?

求大神帮帮忙~

1个回答

c++那里代码可以定义的话,可以用 http://blog.csdn.net/vblittleboy/article/details/11763409

u014032613
xiefeng272 回复caozhy: 哈哈,好的,谢了。回调函数的注册函数的jni 该如何实现呢?
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
安卓写so库调用第三方so库中非JNI接口函数
第三方so库中函数一部分为JNI接口函数,一部分为非JNI接口函数,如何在安卓中调用非JNI接口函数?若自己写一个so库来调用第三方库并调用其中非JNI接口函数如何实现
jni回调函数 c++调用java
typedef void (*app_mrcp_callback)(enum MrcpMessageCallback_E type, void* message); int mrcp_init(app_mrcp_callback cb); struct MrcpJoinClassParam { char* siteID; int siteIDLen; int classID; char* userName; int userNameLen; char* userID; int userIDLen; int nodeID; int userType; char* password; int passwordLen; char* portal; int portalLen; int max_channels; char* customer; }; 这个回调jni里面应该怎么写,江湖急救
anroid jni回调java函数问题
JAVA 代码 1.NativeProviefder.java package com.example.test; public class NativeProviefder { static { System.loadLibrary("test_jni"); } public native void nativeInitilize(); public native void start(); public native void stop(); public void onNativeCallback(int count) { System.out.println("onNativeCallback count=" + count); } } ``` ``` 2.MainActivity.java package com.example.test; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends ActionBarActivity { NativeProviefder np = new NativeProviefder(); boolean isstart = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); np.nativeInitilize(); ((Button) findViewById(R.id.btnstart)).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (isstart) { np.stop(); } else { np.start(); } } }); } ... } ``` JNI代码 test_jni.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <termios.h> #include <errno.h> #include <string.h> #include <android/log.h> #include <jni.h> #include <pthread.h> #define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "", __VA_ARGS__)); JavaVM* gJavaVM; jobject gJavaObj; static volatile int gExit = 0; static void* native_thread_exec(void* arg) { JNIEnv *env; int status; LOGI("onNativeCallback thread1"); status = (*gJavaVM)->AttachCurrentThread(gJavaVM, &env, NULL); if (status < 0) { LOGI("onNativeCallback modem_log, Failed to GetObjectClass"); return 0; } LOGI("onNativeCallback thread2"); jclass javaClass = (*env)->GetObjectClass(env, gJavaObj); if (javaClass == NULL) { LOGI("onNativeCallback Failed to find javaClass"); return 0; } LOGI("onNativeCallback thread3 javaClass (I)V"); jmethodID javaCallback = (*env)->GetMethodID(env, javaClass, "onNativeCallback", "(I)V"); //这一句报错,提示:java.lang.NoSuchMethodError: no non-static method "Lcom/example/test/NativeProviefder;.onNativeCallback(I)V" if (javaCallback == NULL) { LOGI("onNativeCallback modem_log, Failed to find method javaCallback"); (*gJavaVM)->DetachCurrentThread(gJavaVM); return 0; } int count = 0; while (!gExit) { (*env)->CallVoidMethod(env, gJavaObj, javaCallback, count++); sleep(1); } (*gJavaVM)->DetachCurrentThread(gJavaVM); return 1; } JNIEXPORT void JNICALL Java_com_example_test_NativeProviefder_nativeInitilize(JNIEnv * env, jobject thiz) { (*env)->GetJavaVM(env, &gJavaVM); gJavaObj = (*env)->NewGlobalRef(env, thiz); } JNIEXPORT void JNICALL Java_com_example_test_NativeProviefder_start(JNIEnv * env, jobject thiz) { pthread_t threadId; if (pthread_create(&threadId, NULL, native_thread_exec, NULL) != 0) { LOGI("onNativeCallback start faild!"); return; } LOGI("onNativeCallback start success"); } JNIEXPORT void JNICALL Java_com_example_test_NativeProviefder_stop(JNIEnv * env, jobject thiz) { gExit = 1; LOGI("onNativeCallback stop!"); } Jni的Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := test_jni.c LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) $(LOCAL_PATH) $(MTK_ROOT)/external/meta/common/inc LOCAL_MODULE := libtest_jni LOCAL_SHARED_LIBRARIES := libutils libcutils #LOCAL_PRELINK_MODULE := true LOCAL_MODULE_TAGS := optional eng LOCAL_PROGUARD_ENABLED:= disabled include $(BUILD_SHARED_LIBRARY) 错误找不到JAVA里的函数,不知道什么原因,大神们,请指教? jmethodID javaCallback = (*env)->GetMethodID(env, javaClass, "onNativeCallback", "(I)V"); //这一句报错,提示:java.lang.NoSuchMethodError: no non-static method "Lcom/example/test/NativeProviefder;.onNativeCallback(I)V" 补充:是在android5.1上运行。
C++通过jni向java层传递自定义结构体参数
自定义结构体在java中定义为相应的类,存储数据变量 C++的回调函数的注册函数为: ``` void CCtest::registerInit(void (*pFunc)(PARAMETER*)){ xxxxxxxx ... } ``` 现有若干问题不解。 1.该函数的函数签名的变量类型该如何进行书写? 是直接将参数看作是void类型? ``` {"registerInit","()V",(void*)native_registerInit}; ? ``` 2.假设上述问题解决。 在jni层通过定义 ``` static jmethodID registerInit_callback_method_ID; typedef void (* registerInit_Cb_t)(PARAMETER* myPara); ``` 在native_registerInit函数中直接调用 ``` CCtest::registerInit(registerInit_Cb_t); ``` registerInit_Cb_t指向具体的实现函数nativeregisterInit_Cb; 在函数void nativeregisterInit_Cb(PARAMETER*)中,通过 ``` env->CallVoidMethod(xxxobject,xxxmethodID,/*xxx结构体的参数如何表示成类类型?(jobject?)*/); ``` 调用java层中的回调函数。
请大神指教下,java如何处理从C++回调函数传过来的BITMAP图片数据
下面是.h后缀的C++文件 typedef void (__stdcall *voImageCallback)(LPVOID Parameter, int ImageType, HBITMAP hBitmap); extern BOOL __stdcall voRegisterImageCallback(voImageCallback Callback, LPVOID Parameter); 我通过JNI处理后要在java文件里的ImageCallback 方法获取回调的BITMAP图片,可是java没有BITMAP这个数据类型,请问我该怎么接收这个图片,第一次接触这个东西 )
android jni调用底层函数
在android系统的 sys/devices/platform 目录下有stm.c文件里面有个write( )函数 在app中使用jni要怎么去调用?求大神帮忙指点。
(JNI)c++与java的交互
我要写一个c++的应用程序,但它要调用java的函数,所以用到了JNI,但有一个疑问:java 里面有一个回调,我想c++里面传递一个function给java的回调,求问怎么实现呢??
Java与python有没有类似jni的框架
近日开发遇到一个问题,Java程序会调用python的一个Send函数,这个函数会有一个callback回调函数,所以需要Java去实现这个callback函数。类似java与C的JNI。希望有人可以指导下,先谢过。
安卓 JNI回调Java 总是崩溃
java 代码: package com.example.jnitest; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import java.util.Date; public class MainActivity extends Activity { private TextView mTextView; private Button mCheckBtn; public native String displayHelloWorld();// java native方法申明 public native void callBack();// java native方法申明 public native void sayHello();// java native方法申明 static { System.loadLibrary("JNICall");// 装入动态链接库 } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextView = (TextView) findViewById(R.id.test); mTextView.setText(displayHelloWorld()); mCheckBtn = (Button) findViewById(R.id.check); mCheckBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { callBack(); } }); } public void showMessageFromNative(String message) { System.out.println("chlu---------message=" + message); } public int signTest(int i, Date date, int[] arr) { System.out.println("chlu--------- Sign Test"); return 0; } } C++代码: #include <jni.h> #include "JNICall.h" JNIEnv* env; JavaVM *g_jm; JNIEXPORT jstring JNICALL Java_com_example_jnitest_MainActivity_displayHelloWorld( JNIEnv *env, jobject thiz) { return env->NewStringUTF("chlu---Hello from JNI !"); } JNIEXPORT void JNICALL Java_com_example_jnitest_MainActivity_callBack( JNIEnv* env, jobject obj) { const char *message = "C++传到上层JAVA"; //需要传递到Java层的字符串 jclass class_z = env->FindClass("com/example/jnitest/MainActivity"); jmethodID className_method = env->GetMethodID(class_z, "showMessageFromNative", "(Ljava/lang/String;)V"); env->CallVoidMethod(obj, className_method, message); } JNIEXPORT void JNICALL Java_com_example_jnitest_MainActivity_sayHello( JNIEnv * env, jobject obj) { //否则就传入一个jclass对象表示native()方法所在的类 jclass native_clazz = env->GetObjectClass(obj); //得到jmethodID jmethodID methodID_func = env->GetMethodID(native_clazz, "signTest", "(ILjava/util/Date;[I)I"); //调用signTest方法 env->CallIntMethod(obj, methodID_func, 1L, NULL, NULL); } jint JNI_OnLoad(JavaVM* vm, void* reserved) { jint result = -1; g_jm = vm; if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { return result; } if (env == NULL) { return result; } result = JNI_VERSION_1_4; return result; } /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> #include <stdio.h> #include <string.h> /* Header for class HelloWorld */ #ifndef _Included_JNITCall #define _Included_JNITCall #ifdef __cplusplus extern "C" { #endif JNIEXPORT jstring JNICALL Java_com_example_jnitest_MainActivity_displayHelloWorld( JNIEnv *env, jobject thiz); JNIEXPORT void JNICALL Java_com_example_jnitest_MainActivity_callBack( JNIEnv* env, jobject obj); JNIEXPORT void JNICALL Java_com_example_jnitest_MainActivity_sayHello( JNIEnv * env, jobject obj); #ifdef __cplusplus } #endif #endif 错误: /libdvm.so. Error (3): No such process Stack frame #15 pc 000297e0 /system/lib/libdvm.so: Unable to open symbol file /obj/local/armeabi/libdvm.so. Error (3): No such process Stack frame #16 pc 00030c6c /system/lib/libdvm.so (dvmMterpStd(Thread*)+76): Unable to open symbol file /obj/local/armeabi/libdvm.so. Error (3): No such process Stack frame #17 pc 0002e304 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184): Unable to open symbol file /obj/local/armeabi/libdvm.so. Error (3): No such process Stack frame #18 pc 00063715 /system/lib/libdvm.so (dvmInvokeMethod(Object*, Method const*, ArrayObject*, ArrayObject*, ClassObject*, bool)+392): Unable to open symbol file /obj/local/armeabi/libdvm.so. Error (3): No such process Stack frame #19 pc 0006b627 /system/lib/libdvm.so: Unable to open symbol file /obj/local/armeabi/libdvm.so. Error (3): No such process Stack frame #20 pc 000297e0 /system/lib/libdvm.so: Unable to open symbol file /obj/local/armeabi/libdvm.so. Error (3): No such process Stack frame #21 pc 00030c6c /system/lib/libdvm.so (dvmMterpStd(Thread*)+76): Unable to open symbol file /obj/local/armeabi/libdvm.so. Error (3): No such process Stack frame #22 pc 0002e304 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184): Unable to open symbol file /obj/local/armeabi/libdvm.so. Error (3): No such process Stack frame #23 pc 00063431 /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+336): Unable to open symbol file /obj/local/armeabi/libdvm.so. Error (3): No such process Stack frame #24 pc 0004cbb7 /system/lib/libdvm.so: Unable to open symbol file /obj/local/armeabi/libdvm.so. Error (3): No such process Stack frame #25 pc 0004e32b /system/lib/libandroid_runtime.so: Unable to open symbol file /obj/local/armeabi/libandroid_runtime.so. Error (3): No such process Stack frame #26 pc 0004f057 /system/lib/libandroid_runtime.so (android::AndroidRuntime::start(char const*, char const*, bool)+358): Unable to open symbol file /obj/local/armeabi/libandroid_runtime.so. Error (3): No such process Stack frame #27 pc 00001063 /system/bin/app_process: Unable to open symbol file /obj/local/armeabi/app_process. Error (3): No such process Stack frame #28 pc 0000e4c3 /system/lib/libc.so (__libc_init+50): Unable to open symbol file /obj/local/armeabi/libc.so. Error (3): No such process Stack frame #29 pc 00000d80 /system/bin/app_process: Unable to open symbol file /obj/local/armeabi/app_process. Error (3): No such process Crash dump is completed ********** Crash dump: ********** Build fingerprint: 'Xiaomi/virgo/virgo:4.4.4/KTU84P/5.11.12:user/release-keys' pid: 23900, tid: 23900, name: example.jnitest >>> com.example.jnitest <<< signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr -------- Stack frame #00 pc 0002210c /system/lib/libc.so (tgkill+12): Unable to open symbol file /obj/local/armeabi/libc.so. Error (3): No such process Stack frame #01 pc 00013165 /system/lib/libc.so (pthread_kill+48): Unable to open symbol file /obj/local/armeabi/libc.so. Error (3): No such process Stack frame #02 pc 00013379 /system/lib/libc.so (raise+10): Unable to open symbol file /obj/local/armeabi/libc.so. Error (3): No such process Stack frame #03 pc 000120a3 /system/lib/libc.so: Unable to open symbol file /obj/local/armeabi/libc.so. Error (3): No such process Stack frame #04 pc 000219c0 /system/lib/libc.so (abort+4): Unable to open symbol file /obj/local/armeabi/libc.so. Error (3): No such process Stack frame #05 pc 00048b1f /system/lib/libdvm.so (dvmAbort+78): Unable to open symbol file /obj/local/armeabi/libdvm.so. Error (3): No such process Stack frame #06 pc 0004d487 /system/lib/libdvm.so (dvmDecodeIndirectRef(Thread*, _jobject*)+146): Unable to open symbol file /obj/local/armeabi/libdvm.so. Error (3): No such process Stack frame #07 pc 0006337d /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+156): Unable to open symbol file /obj/local/armeabi/libdvm.so. Error (3):
hadoop jni 如何实现opengl绘图
我做一个尝试,hadoop+jni可以实现hadoop调用C++代码。将C++做好JNI接口函数,代码编译成动态链接库.so,hadoop代码调用.so中的接口函数函数。.so实现的功能,是调用opengl库(一个用于绘图的库)的API,在窗口中绘制一个茶壶。但运行报错。.so分发到节点机运行时,有没有什么注意事项,比如运行权限,.so能不能找到自己的依赖库等等。我附上了我的代码,很少的能帮我看一看,我哪里做错了吗?谢谢。c++中opengl代码在单机JNI调用下是能运行,所以排除了代码不正确的原因。 [代码地址](http://pan.baidu.com/s/1bnErsUb "")
jni调用的函数和native函数不在一个java文件内,调用出错
问题描述如题。下来我贴代码: 这是含有native函数的java文件 ``` public class ProgressBarOperation { static { System.loadLibrary("Pressure"); } public native void startMonitor(); public native void stopMonitor(); } ``` native函数所在的java文件不能继承Activity之类的。是我哪里搞错了还是什么原因,求大神解释。 接下来就是主文件,继承Activity的 ``` public class MainActivity extends Activity implements OnClickListener { private ProgressBar progressBar; private ProgressBarOperation operation; private Button btn_start, btn_stop; static { System.loadLibrary("Pressure"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); progressBar = (ProgressBar) findViewById(R.id.progressBar); operation = new ProgressBarOperation(); btn_start = (Button)findViewById(R.id.btn_start); btn_start.setOnClickListener(this); btn_stop = (Button)findViewById(R.id.btn_stop); btn_stop.setOnClickListener(this); } @Override public void onClick(View v) { if (v.getId() == R.id.btn_start) { new Thread(new Runnable() { @Override public void run() { operation.startMonitor(); } }).start(); } else if (v.getId() == R.id.btn_stop) { operation.stopMonitor(); } } public void setPressure(int pressure) { Log.e("pressure", "" + pressure); progressBar.setProgress(pressure); } } ``` 接下来就是自己编写jni文件了。中间自动生成头文件就不说了 我把整个cpp文件全部贴过来 ``` #include <jni.h> #include <stdlib.h> #include <unistd.h> #include "com_example_pressuretest_ProgressBarOperation.h" int getPressure() { return rand() % 100; } int flag = JNI_TRUE; JNIEXPORT void JNICALL Java_com_example_pressuretest_ProgressBarOperation_startMonitor( JNIEnv *env, jobject obj) { while (flag) { sleep(1); //拿到字节码对象 jclass clazz = env->FindClass("com/example/pressuretest/MainActivity"); jmethodID methodId = env->GetMethodID(clazz, "setPressure", "(I)V"); jobject dpobj= env->NewObject(clazz, methodId); env->CallVoidMethod(dpobj, methodId, getPressure()); } } JNIEXPORT void JNICALL Java_com_example_pressuretest_ProgressBarOperation_stopMonitor( JNIEnv *env, jobject obj) { flag = JNI_FALSE; } ``` env->CallVoidMethod(dpobj, methodId, getPressure());这句话一直报错,错误提示也看不来究竟错在哪里
android jni传递结构体类型给c函数,返回结构体,怎么写啊
android jni传递结构体类型给c函数,返回结构体,怎么写啊 c方法:OutAnalyseResultPacket* EcgMainPro(InEcgPacket* pPacKet) 参数和返回值都是结构体类型
java通过jni接口向C++中传值问题
JNI WARNING: instance jfieldID 0x62bb4ff0 not valid for class Ljava/lang/Class; (GetIntField) in Lcom/xxxx/test/MyActivity;.cmdHUProtoclVersion:(Lcom/xxxx/test/MyActivity$MyVersion;)I (GetIntField) 出现如上的warnning,数值设置不正确,该如何解决?
通过jni调用底层的open函数时老是失败
各位大神,麻烦帮忙看一下如下程序,我在应用程序调用底层的open函数时,在jni那里老是open失败,字符设备已经注册进系统,相应的文件节点也有,就是fd返回老是-1,还请各位帮忙看一下 jni file: #define LOG_TAG "HardControl hardcontrol.cpp" #include <utils/Log.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/ioctl.h> #include <stdlib.h> #include "jni.h" jint fd; jint ledOpen(JNIEnv *env, jobject cls) { ALOGI("jkk native ledOpen 1:%d",fd); fd = open("/dev/leds_test", O_RDWR); ALOGI("jkk native ledOpen 2:%d",fd); if (fd >= 0) return 0; else{ ALOGI("jkk native ledOpen failed,fd=%d",fd); return -1; } // return 0; } jint ledClose(JNIEnv *env, jobject cls) { ALOGI("native ledClose ..."); return 0; } jint ledCtrl(JNIEnv *env, jobject cls, jint which, jint status) { int ret = ioctl(fd, status, which); ALOGI("native ledCtrl: %d, %d, %d",which,status,ret); return ret; } static const char *classPathName = "com/lenovo/hardlibrary/HardControl"; static JNINativeMethod methods[] = { {"ledOpen", "()I", (void *)ledOpen}, {"ledClose", "()I", (void *)ledClose}, {"ledCtrl", "(II)I", (void *)ledCtrl}, }; /* * Register several native methods for one class. */ static int registerNativeMethods(JNIEnv* env, const char* className, JNINativeMethod* gMethods, int numMethods) { jclass clazz; clazz = env->FindClass(className); if (clazz == NULL) { ALOGE("Native registration unable to find class '%s'", className); return JNI_FALSE; } if (env->RegisterNatives(clazz, gMethods, numMethods) < 0) { ALOGE("RegisterNatives failed for '%s'", className); return JNI_FALSE; } return JNI_TRUE; } /* * Register native methods for all classes we know about. * * returns JNI_TRUE on success. */ static int registerNatives(JNIEnv* env) { if (!registerNativeMethods(env, classPathName, methods, sizeof(methods) / sizeof(methods[0]))) { return JNI_FALSE; } return JNI_TRUE; } // ---------------------------------------------------------------------------- /* * This is called by the VM when the shared library is first loaded. */ typedef union { JNIEnv* env; void* venv; } UnionJNIEnvToVoid; jint JNI_OnLoad(JavaVM* vm, void* reserved) { UnionJNIEnvToVoid uenv; uenv.venv = NULL; jint result = -1; JNIEnv* env = NULL; ALOGI("JNI_OnLoad"); if (vm->GetEnv(&uenv.venv, JNI_VERSION_1_4) != JNI_OK) { ALOGE("ERROR: GetEnv failed"); goto bail; } env = uenv.env; if (registerNatives(env) != JNI_TRUE) { ALOGE("ERROR: registerNatives failed"); goto bail; } result = JNI_VERSION_1_4; bail: return result; } driver file: #include <linux/kernel.h> #include <linux/init.h> #include <linux/platform_device.h> #include <linux/gpio.h> #include <linux/leds.h> #include <linux/of_platform.h> #include <linux/of_gpio.h> #include <linux/slab.h> #include <linux/workqueue.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/device.h> #include <linux/cdev.h> static int major; static struct class *cls; //struct cdev *my_cdev; static int led_open(struct inode * inode, struct file * file) { /* int err; err = gpio_request(0, "led1"); err = gpio_direction_output(0,1); err = gpio_request(1, "led2"); err = gpio_direction_output(1,1); err = gpio_request(2, "led3"); err = gpio_direction_output(2,1); err = gpio_request(3, "led4"); err = gpio_direction_output(3,1); */ printk("jkk led_open.\n"); return 0; } static long led_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { printk("jkk led_ioctl, %d,%lu.\n",cmd,arg); return 0; } static struct file_operations leds_ops={ .owner = THIS_MODULE, .open = led_open, .unlocked_ioctl = led_ioctl, }; int leds_init(void) { // int err,devno = MKDEV(major,minor); // cdev_init(my_cdev,&leds_ops); // my_cdev->owner = THIS_MODULE; // my_cdev->ops = &leds_ops; // err = cdev_add(my_cdev,devno,1); // if(err) // printk("add failed,err=%d.\n",err); printk("jkk leds_init.\n"); major = register_chrdev(0, "leds_test", &leds_ops); printk("jkk leds_init major=%d.\n",major); cls = class_create(THIS_MODULE, "leds_test"); device_create(cls, NULL, MKDEV(major, 0), NULL, "leds_test"); /* /dev/leds_jkk */ return 0; } void leds_exit(void) { device_destroy(cls, MKDEV(major, 0)); class_destroy(cls); unregister_chrdev(major, "leds_test"); } module_init(leds_init); module_exit(leds_exit); MODULE_LICENSE("GPL");
android在jni中调用system()函数
想在android程序中实现设备的重启。 android在jni(c++写的)中调用system("reboot"),但是调试时,程序执行到此无任何反应,并继续执行了下面的代码。也试过了其他方法,如:android_reboot(ANDROID_RB_RESTART,0,0); 仍然无法实现重启。 想问各位有什么好办法解决吗?
通过JNI接口调用c++接口时,c++接口中oracle数据库连接总是创建失败,急求解答
封装了一个c++的接口类给java调用,接口中实现一些数据库查询操作, 接口在mfc下测试正常,通过java调用时数据库创建失败,ado,odbc,oci 的接口均试过了,都不成功,请问有人知道怎么解决吗?
关于在Android中的Service类中加载JNI函数的问题。
之前用JNI的方法实现了从服务端到客户端的推送消息。 在Activity下加载库是没问题的。 但是在Service类下加载之后却不能调用。 这是为什么呢?
java使用JNI调用的dll依赖于其它dll路径该如何配置
jni调用dll扩展程序直接配置-Djava.library.path来指定dll所在目录即可以加载到dll,但是如果dll要依赖其它dll的时候会提示 Can't find dependent librarie即找不到dll的依赖库,这种情况可以将需要依赖的dll放到项目根目录下或者jdkbin目录下解决,但是想要导出jar包供其它调用就不行了,而且这种解决方法也不适用,总不能每次调用都把dll文件复制到根目录下,这时该如何处理?
cocos2d中函数通过JNI调用android中类方法的疑问
如题,我试图在cocos2d中调用android的某方法,android中被调用方法如下: public class AppActivity extends Cocos2dxActivity { static { System.loadLibrary("cocos2dcpp"); } public static void gotoActivity() { Intent in = new Intent(AppActivity.getContext(),AndroidUI.class); AppActivity.getContext().startActivity(in); } } cocos2d中声明和提出调用的方法如下: #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) #include <jni.h> #include "platform/android/jni/JniHelper.h" #endif</android></jni.h> void HelloWorld::startAndroidEvent(Ref* sender){ #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) JniMethodInfo minfo; bool b = JniHelper::getStaticMethodInfo(minfo, "org.cocos2dx.cpp.AppActivity", "gotoActivity", "()v;"); if(!b){ CCLog("JniHelper::getMethodInfo error..."); }else{ CCLog("ready to invoke method..."); } #endif } cocos2d生成的安卓程序可正常运行,但执行跳转时会出现如下错误信息: ![CSDN移动问答][1] [1]: https://attachments.tower.im/tower/2708fc9685a34ea7b866f2e5e58f46a5?filename=%29E7A6MDM8Q%7D__88OS2YPL.jpg 拜托有相关经验的朋友能否指点一下可能是哪个方面出现了问题
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方...
吐血推荐珍藏的Visual Studio Code插件
作为一名Java工程师,由于工作需要,最近一个月一直在写NodeJS,这种经历可以说是一部辛酸史了。好在有神器Visual Studio Code陪伴,让我的这段经历没有更加困难。眼看这段经历要告一段落了,今天就来给大家分享一下我常用的一些VSC的插件。 VSC的插件安装方法很简单,只需要点击左侧最下方的插件栏选项,然后就可以搜索你想要的插件了。 下面我们进入正题 Material Theme ...
如何防止抄袭PCB电路板
目录 1、抄板是什么 2、抄板是否属于侵权 3、如何防止抄板 1、抄板是什么 抄板也叫克隆或仿制,是对设计出来的PCB板进行反向技术研究;目前全新的定义:从狭义上来说,抄板仅指对电子产品电路板PCB文件的提取还原和利用文件进行电路板克隆的过程;从广义上来说,抄板不仅包括对电路板文件提取、电路板克隆、电路板仿制等技术过程,而且包括对电路板文件进行修改(即改板)、对电子产品外形模具进行三维...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
相关热词 c# clr dll c# 如何orm c# 固定大小的字符数组 c#框架设计 c# 删除数据库 c# 中文文字 图片转 c# 成员属性 接口 c#如何将程序封装 16进制负数转换 c# c#练手项目
立即提问