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.
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
Мобильная версия