私はここでは初心者ですが、「大きな問題」があります
(Delphiの)DLLがあり、Javaでアクセスしたい。DLLの「本体」(.dpr)で単純なリターンまたはプロシージャを使用すると簡単です。しかし、デスクトップアプリケーションとWebアプリケーション(Javaを使用)で同じコードを使用したいので、インターフェイスを使用する必要があります。以下のコード:
TESTLIB.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.
インターフェイス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など...例を提供できればより良いでしょう)
どうもありがとう!