我是这里的新手,但是,我有一个“大问题”
我有一个 DLL(在 Delphi 中),我想通过 Java 访问它。如果您在 DLL 的“主体”(.dpr) 中使用简单的返回或过程,这很容易。但我需要使用接口,因为我想在桌面应用程序和 Web 应用程序(使用 java)中使用相同的代码。代码如下:
测试库文件
library TESTLIB;
{$DEFINE TESTLIB}
uses
System.SysUtils,
System.Classes,
TestInt in 'TestInt.pas';
{$R *.res}
function MyReturn(Test: PTest): PChar; stdcall;
begin
Result := 'Im Here!';
Test^.vResult := 'Test 123';
end;
exports MyReturn;
begin
end.
接口TestInt.pas
unit TestInt;
interface
type
PTest = ^TTest;
TTest = record
vResult: PChar;
end;
{$IFNDEF TESTELIB}
function MyReturn(Test: PTest): PChar; stdcall;
{$ENDIF}
implementation
{$IFNDEF TESTELIB}
function MyReturn; external 'TESTLIB.DLL' name 'MyReturn';
{$ENDIF}
end.
以及我如何使用 Delphi 中的一个简单应用程序访问它:
unit FormMain;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses TestInt; //The interface
procedure TForm1.Button1Click(Sender: TObject);
var
Test: TTest; //Type declared in Interface TestInt.pas
begin
ShowMessage(MyReturn(@Test)); //Returns Im Here!
ShowMessage(Test.vResult); //Test 123
end;
end.
我想使用 Java 访问它(JNI、JNA 等......如果可以提供一个例子会更好)
非常感谢你们!