C#等价于Cconstchar**我想在C#中实现一个Mongoose(http://code.google.com/p/mongoose/)绑定。有一些示例,但它们不适用于当前版本。这是我当前的函数调用:[DllImport("_mongoose",CallingConvention=CallingConvention.Cdecl)]privatestaticexternIntPtrmg_start(intzero,Nullable,stringoptions);(有效的)C等价物是:constchar*options[]={"document_root","/var/www","listening_ports","80,443s",NULL};结构mg_context*ctx=mg_start(&my_func,NULL,options);其中mg_start定义为:structmg_context*mg_start(mg_callback_tcallback,void*user_data,constchar**options);您可以在此处找到整个C示例:https://svn.apache.org/repos/asf/incubator/celix/trunk/remote_services/remote_service_admin_http/private/include/mongoose.h如何将constchar*options[]传递给C#?感谢DllImport("_mongoose",CallingConvention=CallingConvention.Cdecl)]privatestaticexternIntPtrmg_start(IntPtrcallback,IntPtruserData,[In][MarshalAsAttribute(UnmanagedType.LPArray,ArraySubType=UnmanagedType.LPStr)]string[]options);没有试过这个,但我认为这可以帮助你。如果你想在你的C调用中使用unicode,你可能需要制作ArraySubTypeLPWStr。让它成为LPStr给你ANSI。你在做函数指针吗?这才是真正的挑战所在。不是来自声明和编组,而是来自指针生命周期问题。如果mg_start保留在委托的非托管版本上,您可能会发现thunk已被垃圾收集,不管文档怎么说。我们经常看到这种情况发生,因此我们重新设计了底层胶水,尽可能不使用这种代码风格。一般来说,如果API是一个带有大量回调的繁琐API,那么您将遭受回调的困扰。您最好尝试创建一个C++/CLI库,以一种不太麻烦的方式实现API,并具有明确的托管/非托管边界。C#中的char[]是一个字符串。看起来你正在定义一个指向char[]的指针。在C中,这是数组,对吗?所以在C#中它只是:String[]options={"document_root","/var/www","listening_ports","80,443s",NULL};希望有所帮助。问候。尝试[DllImport("_mongoose",CallingConvention=CallingConvention.Cdecl)]privatestaticexternIntPtrmg_start(intzero,IntPtruserData,string[]options);并使用IntPtr.Zero作为用户数据。和像new[]{"document_root","/var/www","listening_ports","80,443s",null}这样的选项。我只是想建议在项目页面上使用C#绑定以获得它们具有的功能:你试过这个吗?在C#中,char是Unicode字符,因此由两个字节组成。此处不能使用字符串,但您可以使用Encoding.ASCII类将unicode字符串的ASCII表示形式获取为字节数组:byte[]asciiString=Encoding.ASCII.GetBytes(unicodeString);C#的数组是一个引用,在C中是指针,因此您可以将代码编写为:byte[][]options={Encoding.ASCII.GetBytes("document_root"),Encoding.ASCII.GetBytes("/var/www"),编码.ASCII.GetBytes("listening_ports"),Encoding.ASCII.GetBytes("80,443s"),null};除了使用只读索引器和私有字节数组创建包装类外,您不能对const做任何事情,但这在您的情况下不起作用。以上就是C#学习教程:C#相当于Cconstchar**分享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
