将 SWIG 与采用 std::string 作为参数的方法结合使用
我使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当我发现你的问题时,我正在尝试自己解决这个问题。
您需要将其包含
在
.i
文件中。请参阅:STL/C++ 库
了解更多详情。
I was trying to solve this myself when I found your question.
You need to include
in your
.i
file. See:STL/C++ library
for more details.