将 SWIG 与采用 std::string 作为参数的方法结合使用

发布于 2025-01-02 00:01:14 字数 783 浏览 1 评论 0原文

我使用 SWIG 来包装我的 C++ 类。某些方法将 const std::string& 作为参数。 SWIG 创建了一个名为 SWIGTYPE_p_std__string 的类型,但是在调用 c# 中的方法时不能仅为此传递普通字符串。下面的示例只是 SWIG 包附带的修改示例。:

public void setName(SWIGTYPE_p_std__string name) 
{
    examplePINVOKE.Shape_setName(swigCPtr, SWIGTYPE_p_std__string.getCPtr(name));
    if (examplePINVOKE.SWIGPendingException.Pending) throw examplePINVOKE.SWIGPendingException.Retrieve();
}

在我的接口文件中,我只有:

/* File : example.i */
%module example

%{
#include "example.h"
%}

/* Let's just grab the original header file here */
%include "example.h"

用 C++ 包装的方法是:

void Shape::setName(const std::string& name)
{
    mName = name;
}

是否需要将某种类型映射放入接口文件中?如果是这样,我该怎么做?

I used SWIG to wrap my c++ class. Some methods have a const std::string& as a parameter. SWIG creates a type called SWIGTYPE_p_std__string however you cannot just pass a normal string for this when invoking the method in c#. The below example is just a modified example that comes with the SWIG package.:

public void setName(SWIGTYPE_p_std__string name) 
{
    examplePINVOKE.Shape_setName(swigCPtr, SWIGTYPE_p_std__string.getCPtr(name));
    if (examplePINVOKE.SWIGPendingException.Pending) throw examplePINVOKE.SWIGPendingException.Retrieve();
}

In my interface file I just have:

/* File : example.i */
%module example

%{
#include "example.h"
%}

/* Let's just grab the original header file here */
%include "example.h"

And the method that is being wrapped in C++ is:

void Shape::setName(const std::string& name)
{
    mName = name;
}

Is there some sort of typemap I have to put in the interface file? If so, how do I do that?

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

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

发布评论

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

评论(1

情归归情 2025-01-09 00:01:14

当我发现你的问题时,我正在尝试自己解决这个问题。

您需要将其包含

%include "std_string.i" 

.i 文件中。请参阅:

I was trying to solve this myself when I found your question.

You need to include

%include "std_string.i" 

in your .i file. See:

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