gpt4 book ai didi

java - JNA 与 DLL(德尔福)

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:50:39 24 4
gpt4 key购买 nike

<分区>

我是新来的,但是,我有一个“大问题”

我有一个 DLL(在 Delphi 中),我想通过 Java 访问它。如果您在 DLL 的“主体”(.dpr) 中使用简单的返回或过程,这很容易。但是我需要使用一个接口(interface),因为我想在桌面应用程序和 Web 应用程序(使用 java)中使用相同的代码。代码如下:

测试库.DLL

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.

接口(interface)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 等...如果可以提供示例会更好)

非常感谢你们!

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com