Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;以指针为参数的函数,通过swig接口进行处理 我创建了Sigg接口文件,为我的C++文件创建JNI。但是我的一些C++文件中包含了函数,这些函数接受指针作为参数(空虚*),C++布尔和SWIG将其转换为 像SWIGTYPE\u p\u int32\u t这样的类型如何从java传递此类数据类型_Java_C++_Java Native Interface_Swig_Freeimage - Fatal编程技术网

C++;以指针为参数的函数,通过swig接口进行处理 我创建了Sigg接口文件,为我的C++文件创建JNI。但是我的一些C++文件中包含了函数,这些函数接受指针作为参数(空虚*),C++布尔和SWIG将其转换为 像SWIGTYPE\u p\u int32\u t这样的类型如何从java传递此类数据类型

C++;以指针为参数的函数,通过swig接口进行处理 我创建了Sigg接口文件,为我的C++文件创建JNI。但是我的一些C++文件中包含了函数,这些函数接受指针作为参数(空虚*),C++布尔和SWIG将其转换为 像SWIGTYPE\u p\u int32\u t这样的类型如何从java传递此类数据类型,java,c++,java-native-interface,swig,freeimage,Java,C++,Java Native Interface,Swig,Freeimage,例如,函数的一个实际原型如下所示++ DLL_API void DLL_CALLCONV FreeImage_Initialise(BOOL load_local_plugins_only FI_DEFAULT(FALSE)); 在Java文件中使用swig进行转换 public static void FreeImage_Initialise(SWIGTYPE_p_int32_t load_local_plugins_only) 如何从java传递这样的值 我有很多类在函数中包含这样的参数

例如,函数的一个实际原型如下所示++

DLL_API void DLL_CALLCONV FreeImage_Initialise(BOOL load_local_plugins_only FI_DEFAULT(FALSE));
在Java文件中使用swig进行转换

public static void FreeImage_Initialise(SWIGTYPE_p_int32_t load_local_plugins_only)
如何从java传递这样的值

我有很多类在函数中包含这样的参数。 是否有任何方法可以将解决方案应用于批量文件,以尽可能简单地处理数据类型

我读过一个方法是创建帮助函数,但我不能去,因为我有很多C++类,并且对于每个函数,创建返回指针的帮助函数是不可行的。


如果可能,请建议任何其他方式。

这是因为
BOOL
类型的声明很奇怪

在这种特殊情况下,您可以从Java端传递一个
int
。无论是
0
还是
1
都将完成正确的工作


或者,通过为此库创建一个小包装器,您可以将本机代码中的
BOOL
更改为
BOOL

关于booleans,我建议使用
BOOL
而不是
BOOL
,因为JNI直接为其提供类型签名:
Z
(您可以在以下位置检查签名:)

关于指针,如果是指向基本类型的指针,则通过在相应签名前面添加
[
来声明,这是:
int*-->[I
。如果是指向自己类的指针,swig将创建完全限定类


希望这有帮助。

我自己解决了。Swig无法识别头文件中的所有typedef,因此它在包装器中生成了这种类型。我需要在接口文件中重新定义它们。

Swig不知道windows类型。将
%include
添加到接口定义中。

我无法使用java si中的0,1de代替SWIGTYPE_p_int32_t。函数返回SWIGTYPE_p_int32_t和void*类指针的情况如何?但您可以将此类型修补为一个简单的
int
。如果您的函数返回
void*
,则在Java中无法对其进行太多处理。但是,您可以将其存储在
int
中,并将其传递回本机代码re它接受
void*
。我可以为一个函数修补它,先生,但我正在尝试创建第三方库的包装器,它在代码中的多个位置包含这些类型,而不仅仅是单个函数。你可以
#定义SWIGTYPE_p#u int32_t int
SWIG默认情况下不会递归到#include definitions,你通常不希望它这样做。请参阅我的答案,让SWIG了解BOOL等Windows类型。