我有一个包含 ADOConnection 和 ADOQuery 的 dll(Delphi),但是当在 java 中运行被调用的 DLL(使用 JNA)时,控制台会出现一些错误信息(如下):
Java 运行时环境检测到一个致命错误:
内部错误 (0xedfade),pid=4400,tid=3840
JRE 版本:6.0_25-b06 Java VM:Java HotSpot(TM) 客户端 VM(20.0-b11 混合模式,共享 windows-x86) 有问题的框架:C [KERNELBASE.dll+0x812f]
包含更多信息的错误报告文件保存为:C:\Users\Mmn1\Documents\NetBeansProjects\FLMOPDL\hs_err_pid4400.log
如果您想提交错误报告,请访问:http:
//java.sun.com/webapps/bugreport/crash.jsp 崩溃发生在 Java 虚拟机之外的本地代码中。请参阅有问题的框架以了解报告错误的位置。
这是什么bug?(我意识到只有在 ADOConnection ADOQuery 的情况下我有一个表单或作为一个组件并且如果我删除这些组件并执行一个简单的功能,它才会正常工作)。
编辑:
类似的例子如下:
library TESTLIB;
{$DEFINE TESTLIB}
uses
System.SysUtils,
System.Classes,
TestInt in 'TestInt.pas',
Vcl.Dialogs,
sharemem,
Data.DB, Data.Win.ADODB;
{$R *.res}
function MyReturn(x: Integer; Test: PTest): Boolean; stdcall;
var
ado: TADOQuery;
begin
Result := True;
//ado := TADOQuery.Create(nil); <- With this i got a error!
end;
exports MyReturn;
begin
end.
Java中的接口
public interface TestInt extends StdCallLibrary {
TestInt INSTANCE = (TestInt)Native.loadLibrary("C:/test/Win32/Debug/TESTLIB", TestInt.class);
class Test extends Structure {
public String vResult;
public Test() { }
public Test(int x, Pointer p) {
super(p);
read();
}
protected List getFieldOrder() { return Arrays.asList(new String[] { "vResult" }); }
}
Boolean MyReturn(int x, Test test);
}
结论:当我使用组件时,会出现此错误。感谢帮助。