项目要写个DLL调用硬件,因为人力资源的原因只能用Delphi7开发,结果发现传递中文有点问题,研究了一番后解决,其实很简单,关键是使用system.pas下的编码解码方法。以下在本机测试通过。
环境:
Win7 64位旗舰版
JDK1.6 x86
MyEclipse8.6
Delphi7
Delphi代码:
library Project2; uses SysUtils, Dialogs; {$R *.res} function testDLL(sInput: PChar):PChar; stdcall; export; var sTemp : WideString; begin sTemp := UTF8Decode(sInput); ShowMessage(sTemp); result := PChar(UTF8Encode(‘清純哲學TOP1賽高!‘)); end; exports testDLL index 1; begin end.
Java代码:
import com.sun.jna.win32.StdCallLibrary;//delphi7编译的dll一定要用这个,原因你懂的 import com.sun.jna.Native;
// 必须继承Library 这个是jna标准 // 必须定义一个接口,描述所调用的dll或者so文件的方法结构 public interface MyLibrary extends StdCallLibrary { MyLibrary instance = (MyLibrary)Native.loadLibrary("Project2",MyLibrary.class); //描述Project2.dll结构 String testDLL(String sInput); } public static void main(String[] args) { try { String sInput = "峯岸Team4最高!"; String tmp = MyLibrary.instance.testDLL(sInput); System.out.println(tmp); } catch (Exception e) { e.printStackTrace(); } }
经测试DLL内ShowMessage及JAVA控制台输出中文均正常显示
本文出自 “赞否两论-量子” 博客,请务必保留此出处http://quantum.blog.51cto.com/3633234/1410856
JNA调用Delphi7的DLL传递接收中文参数的方法,布布扣,bubuko.com
原文:http://quantum.blog.51cto.com/3633234/1410856