搜索
首页电脑教程电脑知识编写供JAVA调用的DLL的VC实现方法

编写供JAVA调用的DLL的VC实现方法

编写供JAVA调用的DLL的VC实现方法

}(2)编译该java文件,再编译生成头文件(供vc使用)javac GB2PY.java //编译生成class(3)在当前文件夹下创建 com/bw/gb2py 文件夹,将GB2PY.class放入该文件夹,回到当前文件夹,调用javah命令生成头文件。javah com.bw.gb2py.GB2PY //生成头文件,文件名为com_bw_gb2py_GB2PY.h注意头文件中的内容不能更改,否则生成的dll不能使用(4)在VC中新建名为GB2PY的Win32 dll工程,将com_bw_gb2py_GB2PY.h拷贝到工程目录下,并加入工程。再拷贝%JAVA_HOME%/include/jni.h 和 %JAVA_HOME%/include/win32/jni_md.h 到工程目录下,并加入工程。(5)实现com_bw_gb2py_GB2PY.h中声明的方法:Java_com_bw_gb2py_GB2PY_GetPY。注意java string和c中char的转换。java的string都用unicode编码(双字节),而char是单字节的。int (*GetPY)(char* szGBString,PY &oPY);JNIEXPORT jstring JNICALL Java_com_bw_gb2py_GB2PY_GetPY

(JNIEnv * env, jclass, jstring name){static HMODULE hModle = LoadLibrary("PYconvert.dll"); //第三方dll

GetPY = (LPFUN)GetProcAddress(hModle,"GBToPY");int len;char charName[128];

char charPY[512];

len = env->GetStringLength(name) * 2 + 1; //双字节长度转为单字节长度,加1是为了加结束符

memset(charName, 0, len);

const wchar_t * w_buffer = env->GetStringChars(name, 0);

int wlen = wcslen(w_buffer);

len = WideCharToMultiByte(CP_ACP, 0, w_buffer, wcslen(w_buffer) + 1, charName, len, NULL, NULL);

env->ReleaseStringChars(name, w_buffer);//以上代码将java string name中的内容拷贝到了char数组charName中... //省略部分功能代码,通过调用第三方的dll函数将汉字转换为拼音,存储在charPY数组中 int slen = strlen(charPY);

jchar * buffer = new jchar[slen];

len = MultiByteToWideChar(CP_ACP, 0, charPY, strlen(charPY), buffer, slen);

if (len > 0 & len

buffer[len] = 0;//以上代码将char型字符串转换为jchar型字符串 jstring js = env->NewString(buffer, len);

delete [] buffer;return js;}(6)编译生成dll文件,在java中就可以调用了(要用到第二步生成的类)!:)

怎么为VC写的EXE文件写一个DLL文件让这个EXE调用DLL

你是说要怎么写dll?,还是怎么调用你写的dll?

怎么写dll:vc++6.0的话,在创建新工程时常用的选择以下任意一个:

MFC AppWizard[dll] 可以使用MFC框架的动态连接库

Win32 Dynamic-link Library window32位标准动态库

然后选择你需要的框架,然后完成,基本的dll就这样好了。

vs2003及其以上版本(vs2010没用过,不提)的话,创建新

工程常用的有以下两种:

MFC->MFC Dll

Win32->任意一个->在弹出的对话框中选择Dll选项

其它选项看自己的需。然后完成,基本的dll就这样好了。

调用你写的dll:在需要调用的地方使用LoadLibrary("xxx.dll");

xxx.dll是你编写的dll,然后如果你在xxx.dll中编写了

接口的话,可以用以下方法调用dll中的方法:

1、在你的exe工程中包含dll的接口头文件,比如接口函数为void FunName(int a);

2、typedef void(*Func)(int);//定义接口

3、在需要调用的地方使用:

.......................

HMOUDLE hMyDll = LoadLibrary("xxx.dll");

if (hMyDll != NULL)

{

Func *pDllFun=(Func *)::GetProcAddress(hMyDll,"FunName");//FunName就是你Dll中的接口函数

if (pDllFun != NULL)

{

pDllFun(1);//调用Dll中函数

}

}

4、在不需要Dll的时候,卸载Dll。FreeLibrary(hMyDll);

//////////////////////////////////////////////////////

你的Dll有没有生成到exe所在的目录下?

以上是编写供JAVA调用的DLL的VC实现方法的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:Excel办公网。如有侵权,请联系admin@php.cn删除
修复任务栏颜色不变的4种方法在Windows 10 -Minitool中修复任务栏颜色不变的4种方法在Windows 10 -Minitool中May 02, 2025 am 12:50 AM

您是否曾经遇到过“任务栏颜色不变”的问题?您对这个问题感到困惑吗? PHP.CN的这篇文章重点介绍此问题,并为您提供了几种可帮助您修复的方法。

远程桌面服务当前很忙 - 目标解决方案远程桌面服务当前很忙 - 目标解决方案May 02, 2025 am 12:49 AM

尝试连接到Windows Server时,您可能会遇到远程桌面服务当前忙的错误。 Windows Server设置和用户设备都可能是此错误的原因。无论原因是什么,php.cn都可以帮助您

修复:扫描病毒时窗户关闭修复:扫描病毒时窗户关闭May 02, 2025 am 12:48 AM

Windows在扫描病毒时会关闭? Windows Defender的完整扫描会使PC关闭?当这个问题发生时该怎么办?在PHP.CN的这篇文章中,您将学习一些可行的解决方案。

网络错误消息出现在chatgpt中?尝试7种修复方法! -  Minitool网络错误消息出现在chatgpt中?尝试7种修复方法! - MinitoolMay 02, 2025 am 12:47 AM

CHATGPT网络错误是编写代码或AI编写长答案时可能发生的常见问题。如果您遇到此问题,该怎么办?不用担心,尝试在这篇文章中使用PHP.CN收集的几种方式来轻松获取

修复Windows Update Check为更新灰色修复Windows Update Check为更新灰色May 02, 2025 am 12:44 AM

获取Windows更新的一种方法是单击Windows Update中的“检查更新”按钮。但是,如果检查更新按钮的检查是灰色的,您知道要解决问题吗?在这篇文章中,PHP.CN软件将引入一些甲基苯丙胺

完整的固定前景指南,而不是节省胜利的选秀完整的固定前景指南,而不是节省胜利的选秀May 02, 2025 am 12:43 AM

Outlook草稿电子邮件通常存储在草稿文件夹中。但是,有时您可能会遇到“ Outlook不保存草稿”的问题。在这种情况下,您应该如何找到电子邮件草案并处理此问题?在这篇文章中

iCloud邮件登录/注册|如何访问iCloud邮件PC/Android -MinitooliCloud邮件登录/注册|如何访问iCloud邮件PC/Android -MinitoolMay 02, 2025 am 12:42 AM

这篇文章提供了iCloud邮件登录和注册指南。您可以创建一个免费的iCloud邮件帐户来使用它来在网络或任何设备上发送或接收电子邮件。还包括有关如何在Windows 10/11或Android上访问iCloud邮件的说明。

下载并安装Windows ADK用于Windows [完整版本] -Minitool下载并安装Windows ADK用于Windows [完整版本] -MinitoolMay 02, 2025 am 12:41 AM

当您尝试提供Windows 11/10时,您需要Windows ADK(Windows评估和部署套件)的相应版本来帮助您完成任务。这篇来自PHP.CN的帖子会教您如何下载和安装Windows ADK。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。