1

Monotouch でラップされた Dll のいくつかのクラスを使用すると、いくつかの問題が発生しました。一部のメソッドには、Objective-C の型 (const char*) のパラメーターがあり、ラッパーの作成時に文字列に変換しました。これまでのところ、すべてがうまくいっています。問題は、私が持っている 1 つのクラスが URL へのソケット接続を試みていることです。URL の名前を含む文字列変数を作成しましたが、Dll の生成ログでは常にこの「X」のような特殊文字で URL が表示され、ホスト名が不明であると表示されます。以下は、Obj-C と C# の 2 つのメソッドの例です。

- (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 のスーパーセットであるため、Objective-C でもサポートされています)。

IntPtr(の代わりにstring) を使用し、文字列を自分でマーシャリングする必要があります。

于 2012-07-19T17:54:18.773 に答える