语言混编之c调用java
经过验证可以实现,先将实现代码贴出,以备以后使用。
本文默认你的java开发环境已经安装成功,并且对于java语言和c++语言有过了解。
编写测试用类:Demo.java
代码如下:
public class Demo
{
public static int COUNT = 8;
private String msg;
private int[] counts;
public Demo ()
{
this ("default constructor");
}
public Demo (String msg)
{
this.msg = msg;
this.counts = null;
}
public String getMessage ()
{
return msg;
}
public static String getHelloWorld ()
{
return "hello world!";
}
public String append (String str, int i)
{
return str + i;
}
public int[] getCounts ()
{
return counts;
}
public void setCounts (int[] counts)
{
this.counts = counts;
}
public void throwExcp () throws IllegalAccessException
{
throw new IllegalAccessException ("exception occurs");
}
}
由于在java中能够使用函数重载,所以在c语言中调用java是需要确定究竟是调用的是那个函数。在jdk中提供了javap程序。
Javap将一个类和它的方法的一些转储信息输出到标准输出。该工具不把代码反编译为java源代码,但是它会把字节代码反汇编成为由Java虚拟机规范定义的字节代码指令。其用法如下:
-l 输出本地变量表
-public 输出公用类名和方法名
-protected 输出类的受保护方法
-private 输出类的似有方法
-verbose 输出类的栈的信息和本地方法的个数
回到原来主题:
javap -s -p Demo
无法上传图片^_^想象一下吧。在输出中找到如下的语句:
public java.lang.String append(java.lang.String, int);
Signature: (Ljava/lang/String;I)Ljava/lang/String;
在vs2008中新建一个工程(win32 console application),配置工程属性:将jdk中include目录下的头文件加入到工程中,并将该文夹下的win32子目录下的header file同样加入到工程中。
新建main.cpp
代码如下:
#include
相关文档:
Boss说,要看OpenGL,看了快一个月,总算出了个像样的东西,用C写了个3D迷宫,
虽然只有350行
代码,不过边学边写,足足写了一周时间,还是小有成就感的,活活活!
&n ......
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char* str5 = "abc";
const char* str6 = "abc";
cout << boolalpha&nb ......
1) 什么是预编译,何时需要预编译:总是使用不经常改动的大型代码体。
程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。
2) char * const p;
char const * p
const char *p ......
大家都知道在Unix/Linux中有个man命令,可以查询常用的命令,函数。可是对于我们这样只知道用"man 函数名"来查询的人来说,会遇到很多问题,比如:
man read,我想看的是ANSI C中stdio的read函数原型和说明,没想到出来的确是BASH命令的说明,这是怎么回事 ......