1

我有一个 C 文件和一个 Objective C 文件。
即,C 文件是 :CB.m并且CB.h
CB.m包含 ac 函数 : callIncomings()。这个函数必须是一个 C 函数,因为它是一个回调函数。(其签名不能更改)

目标 C 文件是ViewController.h/.xib/.mIncomingCall.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()未显示。

任何想法为什么?

编辑:另外,我想知道,如果我想概括 C 函数并加载一些不同的视图,比如 ABCD.view 或 IncomingCall 视图,我该如何概括这个函数。

编辑 2:这个问题可以是从这里开始的连续性:C 函数调用目标 C 函数

一些澄清:当我将 callIncoming 函数放在 viewcontroller.m 文件中时,它工作正常。但现在我想将它单独放在另一个文件中,因此放在 CB.m 文件中。
这样就回答了您对 varViewController 的疑问。DemoCall 函数在 ViewController 文件中,如果您注意到它是 IBAction,那么是的,IncomingCall 函数肯定会被调用。

输入:是的,就像有人指出的那样,它是真的, varViewController 似乎是 NULL。怎么办??!!我哪里错了??.在此处输入图像描述

4

2 回答 2

4

问题在于以下声明:

static ViewController* varViewController;

ViewController.h.

static关键字意味着将在包含该头文件的每个源文件中本地创建变量(它具有内部链接)因此varViewController, in 中使用的CB.m是一个不同的(未初始化的)指针,指向 .in 中的实际指针ViewController.m

更正此错误:

extern ViewController* varViewController;

(并确保它没有被定义为staticwithin 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 回答