4

私はモノタッチで新しいです。現在、Objective-C ライブラリを MonoTouch にバインドしようとしていますが、これまでのところ多くの作業を行ってきましたが、次のコードをバインドする方法がわかりません。

static inline NSString* UmRet_lookup(UmRet c) {
#define URLOOK(a) case a: return @#a;
switch (c) {
    URLOOK(UMRET_SUCCESS          )
    URLOOK(UMRET_NO_READER        )
    URLOOK(UMRET_SDK_BUSY         )
    URLOOK(UMRET_ALREADY_CONNECTED)
    URLOOK(UMRET_NOT_CONNECTED    )
    URLOOK(UMRET_LOW_VOLUME       )
    URLOOK(UMRET_UF_INVALID_STR   )
    URLOOK(UMRET_UF_NO_FILE       )
    URLOOK(UMRET_UF_INVALID_FILE  )
    default: return @"<unknown code>";
    }
    #undef URLOOK
}

また、次のコード:

#define UMLOG_ERROR    @"[UM Error] "
#define UMLOG_WARNING  @"[UM Warning] "
#define UMLOG_INFO     @"[UM Info] "
4

1 に答える 1

5

これは実際にはObjective-Cコードではなく、一部のCプリプロセッサディレクティブであるため、バインドすることはできません。

このような場合、これをC#に書き直す必要があります。これは、エラーコードを文字列表現に変換したもののようです。アプリによっては、(の代わりに)C#文字列を使用することをお勧めしますNSString

static public NSString UmRet_lookup (UmRet c)
{
   switch (c) {
   case UMRET_SUCCESS : return new NSString ("UMRET_SUCCESS");
   case UMRET_NO_READER : return new NSString ("UMRET_NO_READER");
   case UMRET_SDK_BUSY : return new NSString ("UMRET_SDK_BUSY");
   case UMRET_ALREADY_CONNECTED : return new NSString ("UMRET_ALREADY_CONNECTED");
   case UMRET_NOT_CONNECTED : return new NSString ("UMRET_NOT_CONNECTED");
   case UMRET_LOW_VOLUME : return new NSString ("UMRET_LOW_VOLUME");
   case UMRET_UF_INVALID_STR : return new NSString ("UMRET_UF_INVALID_STR");
   case UMRET_UF_NO_FILE : return new NSString ("UMRET_UF_NO_FILE");
   case UMRET_UF_INVALID_FILE : return new NSString ("UMRET_UF_INVALID_FILE");
   default: return new NSString ("<unknown code>");
   }
}

他の定義はC#静的に変換する必要があります。

static public NSString UMLOG_ERROR = new NSString ("[UM Error] ");
static public NSString UMLOG_WARNING = new NSString ("[UM Warning] ");
static public NSString UMLOG_INFO = new NSString ("[UM Info] ");

ここでも、C#を使用することをお勧めしますstring(そしてそれらも変換しconstます)。

于 2012-12-27T16:09:22.387 に答える