Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.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
Java 如何在我的主类中使用SWIGTYPE_p_CHAR类?_Java_C_Java Native Interface_Swig - Fatal编程技术网

Java 如何在我的主类中使用SWIGTYPE_p_CHAR类?

Java 如何在我的主类中使用SWIGTYPE_p_CHAR类?,java,c,java-native-interface,swig,Java,C,Java Native Interface,Swig,我使用过打字图: %include "typemaps.i" %apply SWIGTYPE * {char *deci}; 这是SWIG生成的代理类: public class SWIGTYPE_p_char { private long swigCPtr; protected SWIGTYPE_p_char(long cPtr, boolean futureUse) { swigCPtr = cPtr; } protected SWIG

我使用过打字图:

%include "typemaps.i"

%apply SWIGTYPE * {char *deci};
这是SWIG生成的代理类:

public class SWIGTYPE_p_char {
    private long swigCPtr;

    protected SWIGTYPE_p_char(long cPtr, boolean futureUse) {
        swigCPtr = cPtr;
    }

    protected SWIGTYPE_p_char() {
        swigCPtr = 0;
    }

    protected static long getCPtr(SWIGTYPE_p_char obj) {
        return (obj == null) ? 0 : obj.swigCPtr;
    }
}

这似乎微不足道,但您是否尝试过:

SWIGTYPE_p_char my_p_char;
毕竟,该类包含的只是指针地址的长int表示

显然,您只能对返回char*或使用char*参数作为伪返回值的c函数使用此函数

如果您想使用char*输入参数,那么很可能需要编写某种类型的helper函数

我最近用SWIG包装了这个函数原型:

int load_config(const char *fn, Config *cfg);
它从字符串(char*)指定的文件将数据加载到我的配置数据结构中

我可以通过以下行从Java调用它:

example.load_config("test.cfg", cfg);
或者:

String cfg_file = "test.cfg";
example.load_config(cfg_file, cfg);

这似乎微不足道,但您是否尝试过:

SWIGTYPE_p_char my_p_char;
毕竟,该类包含的只是指针地址的长int表示

显然,您只能对返回char*或使用char*参数作为伪返回值的c函数使用此函数

如果您想使用char*输入参数,那么很可能需要编写某种类型的helper函数

我最近用SWIG包装了这个函数原型:

int load_config(const char *fn, Config *cfg);
它从字符串(char*)指定的文件将数据加载到我的配置数据结构中

我可以通过以下行从Java调用它:

example.load_config("test.cfg", cfg);
或者:

String cfg_file = "test.cfg";
example.load_config(cfg_file, cfg);

是的,我试过了!!但我的问题是如何初始化变量my_P_char???在那门课上我没有能手或二传手。。。只是一些获取“getPtr”的函数,我认为如果没有某种辅助函数,例如getter和setter函数,您是无法实现的,因为Java没有指针的概念-可能会发布一些代码片段,显示您尝试执行的操作,例如函数原型,你的一些java代码等等。我的意思是你试图从java调用的C函数原型,而不是自动生成的SWIG东西-你有没有仔细阅读过是的,我读过!!!但我正在尝试创建上述SWIG生成类的对象。。。同样,一旦我初始化了这个变量,我就可以像这样调用我的函数:void Example.decimal(我的字符)已经添加到我的帖子中,展示了我是如何将数据传递到包装的C函数的char*参数的是的,我已经尝试过了!!但我的问题是如何初始化变量my_P_char???在那门课上我没有能手或二传手。。。只是一些获取“getPtr”的函数,我认为如果没有某种辅助函数,例如getter和setter函数,您是无法实现的,因为Java没有指针的概念-可能会发布一些代码片段,显示您尝试执行的操作,例如函数原型,你的一些java代码等等。我的意思是你试图从java调用的C函数原型,而不是自动生成的SWIG东西-你有没有仔细阅读过是的,我读过!!!但我正在尝试创建上述SWIG生成类的对象。。。同样,一旦我初始化了这个变量,我就可以像下面这样调用我的函数:void Example.decimal(my_p_char)已经添加到我的帖子中,展示了我是如何将数据传递到包装的C函数的char*参数的。你在这里想实现什么?为什么不使用默认的字符串类型映射?你能展示一个最小的函数来展示你可能想要如何使用它吗?我觉得你把事情复杂化了。即使您没有,也可能有更好的方式为Java用户包装它。@Flexo我知道了。。。非常感谢您的回复!!!!你想在这里实现什么?为什么不使用默认的字符串类型映射?你能展示一个最小的函数来展示你可能想要如何使用它吗?我觉得你把事情复杂化了。即使您没有,也可能有更好的方式为Java用户包装它。@Flexo我知道了。。。非常感谢您的回复!!!!