【问题标题】:Calling C function in Objective-C Awake from Nib从 Nib 调用 Objective-C Awake 中的 C 函数
【发布时间】:2012-02-18 08:40:25
【问题描述】:

我必须在一个 Objective-C 类中实现一个 C 函数,它通常会被 int main 调用(在它自己的文件中)。由于我不熟悉拼接代码,我需要知道如何在 Cocoa 部分的 awakefromnibapplicationDidFinishLaunching 中调用它。或者,如果有更好的方法可以做到这一点,我正在倾听。

这是一个不太技术化的示例:

// Cocoa Imports

#import "AppDelegate.h"
...

// C Inlcudes
#include <stdio.h> 

// (int main had to change to something else obviously)

int dos () { 
printf ("I'm a C program\n"); 
}

// (back to cocoa)

@implementation AppDelegate

@synthesize window;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{

//[This is where I need my C function above to execute]

【问题讨论】:

    标签: objective-c c cocoa function


    【解决方案1】:

    它的调用方式与 C 中的调用方式相同,并且您可以调用任何您喜欢的 C 函数:

    // Cocoa Imports
    
    #import "AppDelegate.h"
    ...
    
    // C Inlcudes
    #include <stdio.h> 
    
    // (int main had to change to something else obviously)
    
    int dos (const char *filename)
    { 
        printf ("I was passed '%s'\n", filename); 
    }
    
    // (back to cocoa)
    
    @implementation AppDelegate
    
    @synthesize window;
    
    - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
    {
        dos("/path/to/some/file");
    }
    

    【讨论】:

    • 哇,这根本不是太多的工作。还有其他(处理此类事情的更好方法)。我实际上早先尝试过,但由于某种原因出现错误。 (禁止隐式声明...);所以也许我的编译器行为不端?感谢您的快速回复。
    • 我得到 error '使用未声明的标识符'字符串'。因为我的就像 dos(string,NULL); ...我该如何解决?
    • 你有更多选择是的;你可以像往常一样调用dos() - main.m 将在你的项目中,或者你可以从AppController+initialize 方法调用它(这是第一次使用类时调用的类初始化程序)。
    • 我明白了。我希望有一种方法可以从它自己的文件中调用它,而不必将其插入其他东西,尽管我对编码很陌生,所以我确信这只是我需要学习的东西。感谢您的帮助 - 非常感谢!
    • dos() 声明超长,您确定要张贴在这里吗?
    猜你喜欢
    • 2011-10-20
    • 2023-04-08
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 2015-03-28
    • 2010-11-06
    相关资源
    最近更新 更多