0

次のように、C コードから Obj-C に実装されたメソッドを呼び出そうとしています。

// MainViewController.m

- (void)Test
{
    [self outputLine:@"Called from MyCode.c"];
}
.
.
.
cFunc(id param);
.
.
.

// MyCode.c

void cFunc(id param)
{
    [param Test]; // compilation error: Parse issue: Expected expression
}

MainViewController が MyCode.c で宣言されていないために発生すると思いますが、MainViewController.h を #include すると、完全に間違っていることを示唆する他のエラーが大量に発生します...どうすれば正しく処理できますか?

ティア

4

3 に答える 3

0

チェック: objc_msgSend を使用して、名前付き引数で Objective C 関数を呼び出す

void cFunc(id param) {
    objc_msgSend(param, sel_getUid("Test"));
}

しかし、上記のリンクによると、引数がレジスタに収まらない場合 (つまり、浮動小数点数、構造体、何とか)、これはいくつかの理由で危険です。

これを行う一般的な方法は、objc_msgSend をキャストすることです。

void cFunc(id param) {
    // Now let's pretend that you want to send someFloat to your method

    void (*objc_msgSendTyped)(id self, SEL _cmd, float bar) = (void*)objc_msgSend;

    float someFloat = 42.f;
    objc_msgSendTyped(param, sel_getUid("Test"), someFloat);
}
于 2013-07-11T13:53:33.930 に答える