以函数为参数的 dll 函数(回调 Java)
Function of a dll with function as parameter (Callback Java)
我正在做一些回调,但在我使用的 DLL 中,我得到了一些使用另一个函数作为参数的函数,我已经尝试使用该接口,但我无法使其工作。
DLL中的函数是这样的:
extern "C" { __declspec(dllexport) DIRET_CALLBACK void RegEnterString(pCallBackEnterString);}
我在 C# 中得到了一个例子:
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
public delegate void _RegEnterString(_CallBackEnterString cbEnterString);
private _RegEnterString dllRegEnterString;
public delegate int _CallBackEnterString(StringBuilder parte1, int tamParte1, StringBuilder parte2, int tamParte2);
如果有人遇到同样的问题。
您需要为用作参数的每个函数创建一个接口,然后像 C# 中的委托一样使用该接口创建引用
public interface anInterface extends Library {
anInterface INSTANCE = (anInterface)Native.loadLibrary("dll"),
anInterface.class);
public interface iCallback extends StdCallLibrary.StdCallCallback{
public int passedFunction(String label);
}
public void aFunction(iCallback cb);
}
您将需要使用:import com.sun.jna.win32.StdCallLibrary;
我正在做一些回调,但在我使用的 DLL 中,我得到了一些使用另一个函数作为参数的函数,我已经尝试使用该接口,但我无法使其工作。
DLL中的函数是这样的:
extern "C" { __declspec(dllexport) DIRET_CALLBACK void RegEnterString(pCallBackEnterString);}
我在 C# 中得到了一个例子:
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
public delegate void _RegEnterString(_CallBackEnterString cbEnterString);
private _RegEnterString dllRegEnterString;
public delegate int _CallBackEnterString(StringBuilder parte1, int tamParte1, StringBuilder parte2, int tamParte2);
如果有人遇到同样的问题。
您需要为用作参数的每个函数创建一个接口,然后像 C# 中的委托一样使用该接口创建引用
public interface anInterface extends Library {
anInterface INSTANCE = (anInterface)Native.loadLibrary("dll"),
anInterface.class);
public interface iCallback extends StdCallLibrary.StdCallCallback{
public int passedFunction(String label);
}
public void aFunction(iCallback cb);
}
您将需要使用:import com.sun.jna.win32.StdCallLibrary;