Использование интерфейса из Delphi DLL в Java (JNA)JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Использование интерфейса из Delphi DLL в Java (JNA)

Сообщение Anonymous »

Использование Com-Interface из Delphi 64-битного DLL не работает для меня. < /p>
delphi part | Блок - dllinterface

Код: Выделить всё

library DLLInterface;

uses
SysUtils,
Classes,
TestInterface in 'TestInterface.pas',
TestInterfaceImpl in 'TestInterfaceImpl.pas'
;

{$R *.res}
function CreateTestInterface(var ppTestInterface : ITestInterface) : integer; stdcall;
begin
ppTestInterface := TTestInterface.Create;
result := 0;
end;

function TestInteger : integer; stdcall;
begin
result := 42;
end;

exports
CreateTestInterface,
TestInteger,
;

begin
end.
< /code>
[b] delphi part | Блок - TestInterface [/b] 
unit TestInterface;

interface

type
ITestInterface = interface(IUnknown)
['{30A63ED5-7427-487B-82D8-F3F013A8FA5C}']
function SetInt(aInt : integer) : integer; stdcall;
function AddInt(aInt : integer) : integer; stdcall;
end;

type
TTestInterface = class(TInterfacedObject, ITestInterface)
private
fIntValue : integer;
public
constructor Create;
function SetInt(aInt : integer) : integer; stdcall;
function AddInt(aInt : integer) : integer; stdcall;
end;

implementation

constructor TTestInterface.Create;
begin
fIntValue := 42;
end;

function TTestInterface.SetInt(aInt : integer) : integer;
begin
fIntValue := aInt;
result := fIntValue;
end;

function TTestInterface.AddInt(aInt : integer) : integer;
begin
result := fIntValue + aInt;
end;

end.
java part
import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.COM.Unknown;

public class ITestInterface extends Unknown {
public ITestInterface() {
}

public ITestInterface(Pointer p) {
super(p);
}

public int SetInt(int a) {
return this._invokeNativeInt(3, new Object[] { this.getPointer(), a });
}
}

import com.sun.jna.Native;
import com.sun.jna.ptr.PointerByReference;
import com.sun.jna.win32.StdCallLibrary;

public interface DLLInterface extends StdCallLibrary {
DLLInterface INSTANCE = Native.load("DLLInterface", DLLInterface.class);
int CreateTestInterface(PointerByReference ptr);
int TestInteger();
}

import com.sun.jna.ptr.PointerByReference;

public class Main {
public static void main(String[] args) {
DLLInterface lib = DLLInterface.INSTANCE;
int myint = lib.TestInteger();
System.out.println("myint: " + myint);
PointerByReference myInterfacePtr = new PointerByReference();
int myint1 = lib.CreateTestInterface(myInterfacePtr);
System.out.println("myint1: " + myint1);
ITestInterface myInterface = new ITestInterface(myInterfacePtr.getValue());
int start = myInterface.SetInt(0);
System.out.println("Start: " + start);
}
}
< /code>
Я пытаюсь использовать методы интерфейса из нативной библиотеки, но
Получение ошибки - в потоке "Main" java.lang.nosuchfielderror < /strong> в этом ряд:
int start = myInterface.setint (0);


Подробнее здесь: https://stackoverflow.com/questions/794 ... n-java-jna
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»