首页 / C# / 如何使用swig和C#处理字符串数组?
如何使用swig和C#处理字符串数组?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何使用swig和C#处理字符串数组?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1114字,纯文字阅读大概需要2分钟。
内容图文
![如何使用swig和C#处理字符串数组?](/upload/InfoBanner/zyjiaocheng/785/3963370e497d4f29b29b8933ba9ceee1.jpg)
我的C类有一个名为init的方法:
int init(int argc, char **argv)
另外,我有一个回调:
void callback(int num, char **str)
我的问题是Swig生成了一个奇怪的类SWIGTYPE_p_p_char.cs,没有像我预期的那样的字符串[].
请指教.
解决方法:
SWIG有一些用于将数组传递给函数的类型映射,在arrays_csharp.i中.但是没有一个用于char * INPUT []但是我们可以调整类型映射来做你想要的:
%module test
%include <arrays_csharp.i>
CSHARP_ARRAYS(char *, string)
%typemap(imtype, inattributes="[In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=0, ArraySubType=UnmanagedType.LPStr)]") char *INPUT[] "string[]"
%apply char *INPUT[] { char **argv }
int foo(int argc, char **argv);
这使用SWIG宏CSHARP_ARRAYS为字符串数组生成typedef,但随后替换imtype,以便我们可以提供自己的编组信息.
我认为这应该足够了.如果需要,可以使用以下命令向生成的模块添加重载:
%pragma(csharp) modulecode = %{
public static int foo(string[] argv) {
return foo(argv.Length, argv);
}
%}
注意:仔细测试 – 我一生中从未编写过C#程序(但是已经写了很多SWIG JNI).我找到了marshaling information on the MSDN forums,但除了检查SWIG的输出看起来是否合理之外,还没有测试过这个.这似乎与this answer相匹配,增加了SizeParamIndex.
内容总结
以上是互联网集市为您收集整理的如何使用swig和C#处理字符串数组?全部内容,希望文章能够帮你解决如何使用swig和C#处理字符串数组?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。