无
无头骑士
Unregistered / Unconfirmed
GUEST, unregistred user!
目前我用JAVA调用DLL成功,但当我的dll使用了ADO或BDE时,java程序就出错了,
dll用DELPHI的程序调用没问题,。。。
JAVA如下
package alvinJNI;
class HelloWorld {
static {
System.loadLibrary("DelphiAction"
//等一下我们就用Delphi来编一个程序,编好之后生成的文件就是 DelphiAction.dll 这是一个动态链接库文件,这个类里先在静态语句块中加载它
}
public native void printText(int i);
//声明一个 native 的本地代码程序,我们使用的是 Delphi 来编写.注意:这个方法在这里只是声明,并没有定义方法体,因为这个方法我们要用 Delphi 来实现.
public static void main(String[] args) {
//创建对象并调用里面的 native 方法.
HelloWorld hw = new HelloWorld();
hw.printText(100);
}
}
DELPHI如下:
uses
SysUtils,
Classes,
JNI,
DB, Dialogs,Forms,
DBTables;
{$R *.res}
procedure Java_alvinJNI_HelloWorld_printText(PEnv: PJNIEnv;
Obj: JObject;
i: JInt);
stdcall;
var
tmpInt: Integer;
// adoc:TADOConnection;
// adot:TADOTable;
Table1: TTable;
begin
//参数提交过来的 int 型数据,在这里是一个 JInt 数据,它其实就是一个 Integer 数据,它的使用更加方便
//它可以直接地参与 Interger 类型数据的运算,是不是很容易.
Application.Initialize;
tmpInt := i + 100;
tmpInt := tmpInt - 100;
showmessage('d');
Table1:=TTable.Create(nil);
Table1.TableName:='';
Table1.DatabaseName:='DBDEMOS';
Table1.TableName:='biolife.db';
Table1.Open;
while not Table1.Eof do
begin
showmessage(Table1.FieldByName('Category').AsString);
Table1.Next;
end;
{ adoc:=TADOConnection.Create(nil);
adot:=TADOTable.Create(nil);
adoc.LoginPrompt:=False;
adoc.ConnectionString:='Provider=SQLOLEDB.1;Password=soft_778899;Persist Security Info=True;User ID=sa;Initial Catalog=qhsw;Data Source=.';
adot.Connection:=adoc;
adoc.Open;
adot.TableName:='tree';
adot.Open;
while not adot.Eofdo
begin
showmessage(adot.FieldByName('name').AsString);
adot.Next;
end;
}
end;
exports
Java_alvinJNI_HelloWorld_printText;
begin
// CoInitialize(NULL);
// initialization//保留字,你可查一下帮助看其出现的具体位置
// Coinitialize;
//finalization
// CoUninitialize;
// Application.initialize(nil);
end.
错误提示就是说:没有Coinitialize之类的。
dll用DELPHI的程序调用没问题,。。。
JAVA如下
package alvinJNI;
class HelloWorld {
static {
System.loadLibrary("DelphiAction"
//等一下我们就用Delphi来编一个程序,编好之后生成的文件就是 DelphiAction.dll 这是一个动态链接库文件,这个类里先在静态语句块中加载它
}
public native void printText(int i);
//声明一个 native 的本地代码程序,我们使用的是 Delphi 来编写.注意:这个方法在这里只是声明,并没有定义方法体,因为这个方法我们要用 Delphi 来实现.
public static void main(String[] args) {
//创建对象并调用里面的 native 方法.
HelloWorld hw = new HelloWorld();
hw.printText(100);
}
}
DELPHI如下:
uses
SysUtils,
Classes,
JNI,
DB, Dialogs,Forms,
DBTables;
{$R *.res}
procedure Java_alvinJNI_HelloWorld_printText(PEnv: PJNIEnv;
Obj: JObject;
i: JInt);
stdcall;
var
tmpInt: Integer;
// adoc:TADOConnection;
// adot:TADOTable;
Table1: TTable;
begin
//参数提交过来的 int 型数据,在这里是一个 JInt 数据,它其实就是一个 Integer 数据,它的使用更加方便
//它可以直接地参与 Interger 类型数据的运算,是不是很容易.
Application.Initialize;
tmpInt := i + 100;
tmpInt := tmpInt - 100;
showmessage('d');
Table1:=TTable.Create(nil);
Table1.TableName:='';
Table1.DatabaseName:='DBDEMOS';
Table1.TableName:='biolife.db';
Table1.Open;
while not Table1.Eof do
begin
showmessage(Table1.FieldByName('Category').AsString);
Table1.Next;
end;
{ adoc:=TADOConnection.Create(nil);
adot:=TADOTable.Create(nil);
adoc.LoginPrompt:=False;
adoc.ConnectionString:='Provider=SQLOLEDB.1;Password=soft_778899;Persist Security Info=True;User ID=sa;Initial Catalog=qhsw;Data Source=.';
adot.Connection:=adoc;
adoc.Open;
adot.TableName:='tree';
adot.Open;
while not adot.Eofdo
begin
showmessage(adot.FieldByName('name').AsString);
adot.Next;
end;
}
end;
exports
Java_alvinJNI_HelloWorld_printText;
begin
// CoInitialize(NULL);
// initialization//保留字,你可查一下帮助看其出现的具体位置
// Coinitialize;
//finalization
// CoUninitialize;
// Application.initialize(nil);
end.
错误提示就是说:没有Coinitialize之类的。