在Monotouch中包装const char *

时间:2012-07-19 16:31:07

标签: objective-c binding xamarin.ios

我在使用Monotouch包装的Dll中的一些类时遇到了一些问题。一些方法在Objective-C中具有类型(const char *)的参数,我在创建包装器时将其转换为字符串。 到目前为止,一切都很顺利。问题是我尝试与url建立套接字连接的一个类。我创建了一个包含url名称的字符串变量,但是在Dll的生成日志中,我总是看到特殊字符中的url,例如这个 X ,它表示主机名是未知的。以下是Obj-C和C#中两种方法的例子:

- (BOOL) open:(const char*)method withUrl:(const char*)url withAsync:(BOOL)isAsync;

[Export ("open:withUrl:withAsync:")]
bool Open (string method, string url, bool isAsync);

另一个:

- (id)init:(const char*)url onPort:(int)port andUseSSL:(BOOL)ssl;

[Export ("init:onPort:andUseSSL:")]
IntPtr Constructor (string url, int port, bool ssl);

第一种方法代表自定义的httpRequest。我甚至尝试使用Encoding.UTF8对字符串进行编码,但没有运气。

有人知道为什么会这样吗?

由于

1 个答案:

答案 0 :(得分:4)

MonoTouch附带的生成器将C#System.String转换为Objective-C NSString。这是Objective-C中使用的最常见的字符串表示形式(适用于iOS和MonoMac)。

然而,这与C / C ++ char*不同(在Objective-C中也支持它,因为它是C的超集)。

您需要使用IntPtr(而不是string)并自行编组字符串。