如何将字符串传递给 C++使用 SWIG 生成的接口从 Java 调用函数

发布于 2024-10-11 01:20:13 字数 239 浏览 4 评论 0原文

我有一堆 C++ 函数,它们将 C std:string 作为函数参数。

我想将 java 字符串传递给这些函数。我已经生成了 Java 和 C++ 之间的 SWIG JNI 接口。我可以很好地看到无参数构造函数,但是如果我尝试使用构造函数中的 String 参数编译 java,我会得到“找不到符号”,我认为这是因为类构造函数的方式发生了一些有趣的事情被定义。

你如何解决这个问题?类型映射是答案吗?如果是这样 - 你从哪里开始?

I have a bunch of C++ functions that take C std:string as function parameters.

I want to pass java Strings to those functions. I have generated a SWIG JNI interface between Java and C++. I can see the no-args constructor fine, but if I try to compile my java with the String arguments in the constructor, I get "cannot find symbol" and I think it is because of something funny going on with the way the class constructor was defined.

How do you remedy this problem? Is a typemap the answer? If so - where do you start?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

花海 2024-10-18 01:20:13

一种方法是,如果您有一小组要调用的函数,可能是简单地将采用 std::string 的 C++ 方法与采用 char* 的方法包装在一起,并使用 Java 字符串从 Java 调用它们,因为 Java 之间的默认类型映射String C++ char* 将按预期工作。您还可以将类似的内容添加到您的 interface.i 文件中:

%include "std_string.i" // for std::string type-maps
#include <string>

我认为这将适用于您的情况,无需任何修改。
有关详细信息,请参阅 Java SWIG 默认类型映射文档
无论您安装了 swig,都可以找到 std_string.i 和 std_basic_string.i 文件。这
旧版本的 SWIG 中可能不可用(我使用的是 2.0.1)。

One way, if you have a small set of functions to call, might be to simply wrap the C++ methods that take std::string with methods that take char* and call them from Java with Java Strings since the default type-map between Java String C++ char* will work as expected. You could also add something like this to your interface.i file:

%include "std_string.i" // for std::string type-maps
#include <string>

I think that this will work for your case without any modification.
For more information see the Java SWIG default type-map documentation and the
std_string.i and std_basic_string.i files found wherever your swig is installed. This
may not be available in older versions of SWIG (i am using 2.0.1).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文