0 0

关于Java和C进行通信的问题3

兄弟们,我昨天晚上弄了一下Java调用C生成的DLL。

第一次,通过DOS进行所有的编译运行,可是出现结果 10。


但是,当我使用Eclipse进行再次编译运行的时候,出现如下异常。

Exception in thread "main" java.lang.UnsatisfiedLinkError: com.test.TestCJ.set(I)V
	at com.test.TestCJ.set(Native Method)
	at com.test.TestCJ.main(TestCJ.java:18)


问题不是处在找不到DLL。

其中com.test.TestCJ.set(I)V是方法名。

Java代码如下
package com.test;

public class TestCJ {
	static {

		System.loadLibrary("goodluck");

	}

	public native static int get();

	public native static void set(int i);

	@SuppressWarnings("static-access")
	public static void main(String[] args) {
		TestCJ test = new TestCJ();

		test.set(10);

		System.out.println(test.get());
	}

}

C头文件为:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_test_TestCJ */

#ifndef _Included_com_test_TestCJ
#define _Included_com_test_TestCJ
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_test_TestCJ
 * Method:    get
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_com_test_TestCJ_get
  (JNIEnv *, jclass);

/*
 * Class:     com_test_TestCJ
 * Method:    set
 * Signature: (I)V
 */
JNIEXPORT void JNICALL Java_com_test_TestCJ_set
  (JNIEnv *, jclass, jint);

#ifdef __cplusplus
}
#endif
#endif


C源文件为:
#include "com_test_TestCJ.h"    
  
int i = 0;    
  
JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass)    
  
{    
  
return i;    
  
}    
  
JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint j)    
  
{    
  
i = j;    
  
}  


还望大家指点下,谢谢了。

问题补充:<div class="quote_title">ancin 写道</div><div class="quote_div">在你的CPP 和 头文件里方法名前加_&nbsp; 下划线;就OK了; <br /></div> <br />
C 
2010年3月30日 13:39

4个答案 按时间排序 按投票排序

0 0

use swig...wrap what you wrote in c

2010年3月30日 13:39
0 0

在你的CPP 和 头文件里方法名前加_  下划线;就OK了;

2010年3月30日 13:39
0 0

你把DLL和包放在同个文件夹下面

2010年3月30日 13:39
0 0

DLL路径,eclipse找不到DLL

2010年3月30日 13:39

相关推荐

    java+C语言实现网络通信

    Java+C语言实现网络通信 Java+C语言实现网络通信是指使用Java语言作为客户端,C语言作为服务器端,通过Socket...在Java和C语言的Socket通信中,需要解决死循环问题,可以使用send函数和BufferedReader来解决这个问题。

    java和c语言tcp通信和文件传送

    一个java语言写的客户端连接C语言写的socket服务器根据tcp进行通信和文件发送

    使用java和C语言进行通信 并且使用结构体传输的代码实例 包含三个示例

    本压缩包提供的是使用Java和C语言进行通信并利用结构体传输数据的代码实例,共有三个示例。这里我们将详细探讨这种通信方式以及如何通过结构体传递数据。 1. **JNI(Java Native Interface)** Java Native ...

    android中java和C的socket通信demo

    以上就是关于“Android中Java和C的Socket通信Demo”的详细说明,包括Java Socket和C Socket的基本使用,JNI接口的建立,文件描述符的传递以及Ashmem的使用。理解并掌握这些知识点,能够帮助开发者在Android平台上...

    linux下C和java通过管道通信

    总结来说,Linux下的C和Java程序可以通过管道进行通信,这涉及到C语言的`pipe()`、`fork()`和`write()`/`read()`函数,以及Java的`java.nio.Pipe`类。理解这些基础知识对于实现进程间的协同工作至关重要。

    java 与C语言使用socket通信传递结构体数据

    在跨语言编程中,有时我们需要Java程序与C语言程序通过网络进行通信,这时可以利用Socket进行数据传输。本文将深入探讨如何使用Java模拟C语言的结构体,以便于两者之间通过Socket进行有效通信。 首先,我们需要理解...

    Java模块与C网关通信

    2. **网络通信**:Java模块和C网关可以通过TCP/IP或者HTTP等网络协议进行通信,比如RESTful API、gRPC、WebSocket等。这种方式下,C网关暴露为一个网络服务,Java模块作为客户端发起请求并接收响应。 3. **消息队列...

    des加密解密(java和c语言互通)

    在本项目中,“des加密解密(java和c语言互通)”指的是实现了一个能够在Java和C语言之间无缝进行DES加密和解密的解决方案。一周的开发工作旨在确保两个不同编程语言编写的程序可以相互读取和处理由DES算法加密或...

    java与c++通过socket通信

    Java和C++之间的Socket通信是跨语言网络编程的一个常见应用场景,尤其在系统集成、设备通讯或者混合编程中。Socket提供了一种基于TCP/IP协议的进程间通信(IPC)方式,可以实现在不同操作系统上的进程之间的数据传输...

    java和C++通信结构体发送

    标题中的“Java和C++通信结构体发送”指的是在Java和C++这两种不同的编程语言之间,通过网络进行通信时如何有效地传递结构体数据的问题。在跨语言通信中,由于二进制序列化和内存布局的差异,直接传输结构体会面临...

    java 与C语言传递结构体数据

    描述:为了解决java与C结构通信过程中结构体解析问题。 主要功能:能友好的用java处理任何发送的C结构体对象,并且能发送java对象转换成C结构体接收的二进制。 功能说明 1、基于spring框架开发 2、对于结构体定义...

    Java与c语言 DES加密互通

    Java和C语言之间的数据加密互通是一个常见的跨平台通信需求,特别是在多语言系统集成或嵌入式设备通信中。本文将详细介绍如何使用DES(Data Encryption Standard)加密算法在Java和C语言之间实现加密和解密的互通。 ...

    LINUX下JAVA程序与C语言程序通过SOCKET通信的简单例子.pdf

    LINUX下JAVA程序与C语言程序通过SOCKET通信的简单例子.pdf

    JAVA程序与PLC之间的通信

    在IT行业中,编程语言Java与工业自动化设备如PLC(可编程逻辑控制器)之间的通信是一个重要的领域,尤其在实现智能制造和物联网(IoT)应用时。"JAVA程序与PLC之间的通信"这个主题涵盖了许多关键知识点,让我们逐一...

    java进程间管道通信1

    Java进程间的管道通信是一种进程间通信(IPC,Inter-Process Communication)的方式,它允许不同的Java进程之间通过共享的管道进行数据传输。虽然Java标准库不直接支持创建管道文件,但可以借助于操作系统提供的功能...

    java与android串口通信示例代码

    Java与Android串口通信是设备间进行数据交互的一种常见方式,尤其在物联网和嵌入式系统中广泛应用。本文将深入探讨如何使用Java和Android进行串口通信,以及相关的技术细节。 首先,我们要知道什么是串口通信。串口...

    利用Java Sock实现C/S通信

    Java Socket是Java网络编程中的...通过这个项目,你可以深入理解Java Socket在C/S通信中的工作原理,为今后进行更复杂的网络编程打下坚实基础。在实际开发中,还可以考虑添加多线程支持,以处理多个并发的客户端连接。

    基于Java的企业内部通信系统源代码

    【Java企业内部通信系统源代码解析】 在Java编程领域,构建企业内部通信系统是一项常见的任务,这涉及到网络编程、多线程、并发处理等多个技术领域。本系统利用Java的强大功能,实现了高效、稳定且易于使用的内部...

    androidjni编程,java和c层的互相通信传递数据

    Android JNI(Java Native Interface)编程是Android开发中的一个重要部分,它允许Java代码和其他语言(如C/C++)编写的代码进行交互。JNI在Android平台上扮演着桥梁的角色,使得开发者能够利用C/C++的强大性能和...

    C语言调用java语言方法

    JNI允许Java代码和其他语言(如C/C++)进行无缝交互,提升性能或者利用已有的库资源。 首先,我们需要理解JNI的基本概念。JNI是Java平台提供的一种接口,它允许Java代码调用本地(native)代码,也就是非Java语言...

Global site tag (gtag.js) - Google Analytics