项目要写个DLL调用硬件,因为人力资源的原因只能用Delphi7开发,结果发现传递中文有点问题,研究了一番后解决,其实很简单,关键是使用system.pas下的编码解码方法。以下在本机测试通过。
环境:
Win7 64位旗舰版
JDK1.6 x86(重要,不能使用x64版本)
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控制台输出中文均正常显示
转载于:https://blog.51cto.com/quantum/1410856