1

我在使用 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 对字符串进行编码,但没有成功。

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

谢谢

4

1 回答 1

4

MonoTouch 随附的生成器将 C# 转换System.String为 Objective-C NSString。这是在 Objective-C(iOS 和 MonoMac)中最常用的字符串表示。

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

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

于 2012-07-19T17:54:18.773 回答