2012-07-19 29 views
1

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

- (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

可能是垃圾(腐败)或编码问题。你能编辑你的问题,并显示原始定义以及如何将它们转换为C#吗? – poupou 2012-07-19 17:23:43

+0

我编辑了我的问题。感谢poupou。 – Thabet 2012-07-19 17:40:27

回答

4

附带MonoTouch的发电机变换C#System.String到目标C NSString。这是Objective-C中使用的最常见的字符串表示形式(适用于iOS和MonoMac)。

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

您需要使用IntPtr(而不是string)并自己封送字符串。

+0

非常感谢。它的工作原理:D – Thabet 2012-07-19 18:41:49

+0

伟大:-)为了帮助他人,请将问题标记为已回答(灰色标记在投票/上/下),因为这将有助于今后搜索类似的问题。谢谢! – poupou 2012-07-19 19:00:16

+0

原来投票需要15个声望,我只有11个(我是新的),所以我会尽快完成。 – Thabet 2012-07-19 19:23:50