ADOConnection と ADOQuery を含む dll (Delphi) がありますが、呼び出された DLL を Java で (JNA を使用して) 実行すると、コンソールにいくつかのエラー情報が表示されます (以下)。
Java ランタイム環境によって致命的なエラーが検出されました:
内部エラー (0xeedfade)、pid=4400、tid=3840
JRE バージョン: 6.0_25-b06 Java VM: Java HotSpot(TM) Client 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 仮想マシンの外部で発生しました。バグを報告する場所については、問題のあるフレームを参照してください。
これは何のバグですか?(フォームがある場合、または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);
}
結論: コンポーネントを使用すると、このエラーが発生します。手伝ってくれてありがとう。