1

C ファイルと Objective C ファイルがあります。
つまり、C ファイルは :CB.mであり、CB.h
CB.mac 関数 : が含まれていますcallIncomings()。この関数はコールバック関数であるため、C 関数である必要があります。(署名は変更できません)

Objective C ファイルは、ViewController.h/.xib/.mおよびIncomingCall.h/.m/.xib.

さて、ViewController.h で次のように宣言しました。

static ViewController* varViewController;

viewDidLoad、次を割り当てます。

varViewController = self;

そして、私は次のコードを持っていますCB.m

#include <stdio.h>
#import "ViewController.h"
#import "IncomingCall.h"

int callIncomings(int a, char* b)
{

    IncomingCall *obj = [[IncomingCall alloc]initWithNibName:@"IncomingCall" bundle:nil];
    //NSString *temp =
    //NSString* string =
    obj.tempAddress = [NSString stringWithFormat:@"%s" , b];

    [obj setModalTransitionStyle:UIModalTransitionStylePartialCurl];
    [varViewController presentModalViewController:obj animated:YES];

    [obj release];

    return 1;
}

この関数は で呼び出されます:

- (IBAction)DemoCall:(id)sender {
    callIncomings(1, "from C file");    
}

プロジェクトは正常にビルドされますが、ビューIncomingCall()が表示されません。

アイデアはなぜですか??

EDIT:また、C関数を一般化し、ABCD.viewまたはIncomingCallビューなどの別のビューをロードしたい場合、この関数を一般化するにはどうすればよいか知りたいと思いました。

EDIT 2:この質問はここから継続することができます:目的のC関数を呼び出すC関数

いくつかの明確化: viewcontroller.m ファイルに callIncoming 関数を入れると、正常に機能しました。しかし、今は別のファイル、つまり CB.m ファイルに別々に配置したいと考えています。
これで、varViewController に関する疑問に答えます。DemoCall 関数は ViewController ファイルにあります。これが IBAction であることに気付いた場合、そうです。関数 IncomingCall が確実に呼び出されています。

入力 : はい、誰かが指摘したように、varViewController は NULL のようです。それで??!!どこが間違っていますか?? .ここに画像の説明を入力

4

2 に答える 2

4

問題は、次の宣言にあります。

static ViewController* varViewController;

ViewController.h

このstaticキーワードは、変数がそのヘッダー ファイルを含むすべてのソース ファイルでローカルに作成される (内部リンケージを持つ) ことを意味します。したがって、varViewControllerで使用されるCB.mは、の実際のポインタとは異なる(初期化されていない) ポインタViewController.mです。

このエラーを次のように修正します。

extern ViewController* varViewController;

static(そして、内で定義されていないことを確認してViewController.mください。そうしないと、リンク エラーが発生します)。

于 2012-10-17T11:07:16.973 に答える
0

次のコードを書いてください...

#include <stdio.h>
#import "ViewController.h"
#import "IncomingCall.h"


static  int callIncomings(int a, char* b);
于 2012-10-17T10:29:51.407 に答える