c与java混合编程
⑴ 如何在C++和java之间互相调用
java 与 C++ 两种编程语言,它们之间的相互调用:
1、java 调用C++编写的dll,可使用JNI 或 Jawin 开源项目(推荐第二种方法)。
2、C++ 调用java 的变量、方法,通过JNI (Java Native Interface)与java类交互。
----操作步骤(只总结第二个)-----
(1) vc6.0编译C++程序,开发环境设置:工具--》选项--》工具,工具标签下:选择“include files”,加入头文件目录:C:\Program Files\Java\jdk1.5.0\include 和 C:\Program Files\Java\jdk1.5.0\include\win32 ;选择“Libary files"下,加入LIB目录:C:\Program Files\Java\jdk1.5.0\lib 。会编译成exe文件。
执行程序环境设置: Path环境变量加入:C:\Program Files\Java\jdk1.5.0\jre\bin\client (jvm.dll所在目录),若不加入path会提示,执行时找不到jvm.dll.
(2)GetStaticMethodID(cls,"main","([Ljava/lang/String;)V");
//([Ljava/lang/String;)V 是main()签名
在java程序目录下执行:javap -s -p ClassDemo (注:ClassDemo.java 已经编译)
取main 下面的语句 :: Signature: ([Ljava/lang/String;)V
(3)附代码示例:
java程序
import java.io.*;
public class DemoMain{
public static void main(String[] args) throws java.io.IOException, java.lang.NullPointerException
{
System.out.println("This is a test.");
}
}
C++程序:
#ifndef __cplusplus
#define __cplusplus
#endif
#include "jni.h"
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#pragma comment (lib,"C:\\Program Files\\Java\\jdk1.5.0\\lib\\jvm.lib") // 动态调用lib
#pragma warning(disable: 4129) // 关闭 warning, 4129
void main() {
LoadLibrary("C:\\Program Files\\Java\jre1.5.0\\bin\\client\\jvm.dll"); // 动态调用dll
JavaVM *jvm;
JNIEnv *env;
JavaVMInitArgs vm_args;
JavaVMOption options[3];
options[0].optionString = "-Djava.compiler=NONE";
options[1].optionString = "-Djava.classpath=.";
options[2].optionString = "-verbose:jni";
vm_args.version = JNI_VERSION_1_4;
vm_args.nOptions = 3;
vm_args.options = options;
vm_args.ignoreUnrecognized = JNI_TRUE;
jint res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); // 创建虚拟机
if (res < 0) {
fprintf(stderr, "Can't create Java VM\n");
exit(1);
};
jclass cls = env->FindClass("DemoMain");
if (cls == 0) printf("Sorry, I can't find the class");
fprintf(stdout, "This is invokeSimplified4.\n");
jmethodID get_main_id;
if(cls != NULL)
{
get_main_id =env->GetStaticMethodID(cls,"main","([Ljava/lang/String;)V");
fprintf(stdout, "This is invokeSimplified5.\n");
if(get_main_id != NULL )
{
jclass string = env->FindClass("java/lang/String");
jobjectArray args = env->NewObjectArray(0,string, NULL);
fprintf(stdout, "This is invokeSimplified6.\n");
int i = env->CallIntMethod(cls, get_main_id, args);
fprintf(stdout, i+ "This is invokeSimplified7.\n");
}
}
jvm->DestroyJavaVM();
fprintf(stdout, "Java VM destory\n");
}
⑵ 我是个门外汉,请问C++和JAVA可以一起学吗
建议不要混在一起学,Java不是C家族成员。原因如下:
1)可以先学C++后再学Java,有C++的指针,面向对象基础作铺垫,再学Java或其它任何一门语言会有事半功倍效果;
2)正如前面所说,Java不是C家族的成员,例如,在面向对象这块至少在一些语法层面上,你会发现Java的语法是很恶心的。如B类需要继承A类:
Java会这样写
classA{
}
classBextendsA{
}C++这样写(C家族)
classA{
};
classB:A{
};C#这样写(C家族)
classA{
}
classB:A{
}再比如,在Java里,类变量,类方法,不仅可以用类名去调用,甚至还可以用对象名去调用,而在C家族里是不允许的。
再比如,在Java里定义类的成员时,若不加访问修饰符时,默认访问级别是本包任何地方均可以访问,而C家族默认是私有的,即类体内部可访问。
当然还有很多差异...
⑶ C# 和java 可以放在一起编程吗、
图书管理系统 是C/S模式 还是B/S模式?
B/S模式 就是网站的话 两个人各开发某些部分 然后 两个都运行起来
C/S模式 就是桌面程序的话 两个开发之后 相互之间用外部调用
这个是不是办法的办法
最好是其中一个自学
JAVA的同学学习.NET的话 会很快上手。 我是这么学过来的。
⑷ java和c语言能混合编程吗。
通过JNI,Java中的native方法,就是调用C/C++写的函数
⑸ Java 和C语言同时学可以吗
个人意见
相同点:他们都是高级语言,都需要对电脑的基础知识的了解
不同点:C是属于底层开发,是高级语言但是又具有操作硬件的特点,所以学起来比较困难,如果想学好必须先知道计算机的内存工作原理比较好!要么就是花很多时间积累经验(就算是不知道内部原理但是会用就OK了)
JAVA是属于面向对象的,简单的说就是 它的数据对象具有 封装、集成性等特点。但是相对比较简单,涉及的底层东西比较少!比C++容易多了!个人意见!
如果两者同时学未免都学不好,倒是建议楼主可以有所侧重,主要学C然后兼顾了解JAVA未免不可!到时候等C学成时候,再返回来攻JAVA倒是上上选!
当然了,如果楼主又足够的时间的话(假设你是一名在校学生),那就另当别论了!想怎么学就怎么学!
⑹ 如何在C++和java之间互相调用
在JAVA中调用C++的基本步骤
(1)、编写带有native方法的java类
(2)、使用javac命令编译所编写的java类
(3)、使用javah命令处理类文件,生成C/C++头文件
(4)、使用C/C++实现本地方法
(5)、将C/C++编写的文件生成动态连接库
(6)把生成的.dll库放到c:/windows/system32目录下
⑺ 如何为一个用C语言编写的程序加上一个用Java编写的界面
1、编写java程序jcall.java,如下:
public class jcall
{
static
{
System.loadLibrary("jcallc.dll");
}
public native static int test(int i);
public static void main(String[] args)
{
jcall jc = new jcall();
int i;
i = jc.test(4);
System.out.println(i);
}
}
2、编译java
javac jcall.java
4、生成头文件
javah jcall
生成jcall.h文件
5、制作VC动态库
建立DLL工程,程序添加:
#include "jcall.h"
JNIEXPORT jint JNICALL Java_jcall_test (JNIEnv *, jclass, jint p)
{
int j = p*2;
return j;
}
将jcall.h jni.h复制到VC工程目录,然后编译。
6、java调用
将jcallc.dll文件复制到jcall.java的目录中,运行
java jcall,就可以得到运行结果。
⑻ JAVA和C语言可以共同开发某个应用软件吗
这个是可以的,因为有混合编程这个概念的,两者只要环境在就可以了,程序就是为实现功能的。
⑼ 如何在java中实现c语言中的联合的功能
用类, 只有这样。
class DateE{
long ul[2];
int ui[4];
byte uc[8];
//get/set方法
}
java没有 unsigned long,如果数很大就换成BigDecimal
,或 BigInteger
⑽ java和C#能否混合编程
请问你这样的代码用什么编译器来编译啊?明显是不行的啊!不过你可以用多文件调用的方式来搞。单一文件是肯定不行的
