服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

用vj++6.0的j/direct调用dll


  北京信息工程学院软件工程室
马文晓
---- microsoft 虚拟机提供了很多方式,允许程序员在java中调用由其他语言实现的称为native的方法.可选以下某一调用方式:j/direct,activex/javabeans集成,rni,低级java/com 集成,它们各有优劣,详情见msdn6.0中"mixng java and native code"文.调用win32或用户api的最简方式是j/direct.下面举两例说明,可用vj++6.0的console application建立项目, 用ie5.0实现虚拟机,在dos窗口下用windows95的jview运行.class.

---- 例1.调用user32.dll中的messagebox函数:

public class class1
{/** @dll.import("c:windowssystem user32")
*/private static native int messagebox
(int hwndowner, string text, string title,int style);
public static void main(string args[])
{messagebox(0,"user32","no parent window",0);}}
例中,用/** @dll.import("c:windowssystemuser32")
*/指明dll,可用dumpbin查看dll的输出函数,
用native声明java方messagebox原型,
native方函数原型可查相应声明.
java与native方函数原型中某些数据类型对照是:

java方简单数据类型
native方简单数据类型
byte
byte or char
short
short or word
int
int, uint, long, ulong, or dword
char
tchar
long
__int64
float
float
double
double
boolean
bool
string
lpctstr
stringbuffer
lptstr
void
void

---- 例2.调用用户dll中的rev_string,将字符串反序.先用vc6.0的appwizard, 在c:mydll下,建立win32 dll项目,进一步选择"a simple dll project" 类型.在.cpp文件中添加

#include < string.h >
__declspec(dllexport) void __cdecl rev_string
(lpctstr src_str,lptstr result_str){
strcpy(result_str,_strrev((char*)src_str));}

---- 这里lpctstr,lptstr分别对应java的string和stringbuffer,只能用带空间的stringbuffer接受结果串.链接前,必须在project- >settings...- >link的project options窗口内添加"/export:rev_string". 选择release目标后,将在c:mydll elease下将生成mydll.dll.

java方的程序是
public class class1
{ /** @dll.import("c:/mydll/release/mydll") */
private static native int rev_string
(string str, stringbuffer result_str);
public static void main(string args[])
{
string str="xyz";stringbuffer
result_str=new stringbuffer(str.length()+1);
rev_string (str,result_str);
system.out.println(result_str); }}
运行后,将在dos窗口输出"zyx".

扫描关注微信公众号