我在使用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对字符串进行编码,但没有运气。
有人知道为什么会这样吗?
由于
答案 0 :(得分:4)
MonoTouch附带的生成器将C#System.String
转换为Objective-C NSString
。这是Objective-C中使用的最常见的字符串表示形式(适用于iOS和MonoMac)。
然而,这与C / C ++ char*
不同(在Objective-C中也支持它,因为它是C的超集)。
您需要使用IntPtr
(而不是string
)并自行编组字符串。