C ++中的简单警报框,而不是Objective-C

时间:2011-11-11 12:43:32

标签: c++ macos cocoa

我需要一个非常简单的警告框,如NSRunAlertPanel(),但这适用于C ++嵌入式64位应用程序,我不知道Cocoa或Objective-C。

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:2)

选项A

一种解决方案是查看CFUserNotification API。

选项B

另一种选择是使用CoreFoundation类型作为参数来包装NSRunAlertPanel

// MONNSRunAlertPanel.hpp
extern "C++" {
int MONNSRunAlertPanel(CFStringRef title,
                       CFStringRef msg,
                       CFStringRef defaultButton,
                       CFStringRef alternateButton,
                       CFStringRef otherButton);
}


// MONNSRunAlertPanel.mm

#include <Foundation/Foundation.h>
#include "MONNSRunAlertPanel.hpp"

int MONNSRunAlertPanel(CFStringRef title,
                       CFStringRef msg,
                       CFStringRef defaultButton,
                       CFStringRef alternateButton,
                       CFStringRef otherButton) {
    int result = 0;
    @autoreleasepool {
        result = NSRunAlertPanel(
            (NSString *)title,
            (NSString *)msg,
            (NSString *)defaultButton,
            (NSString *)alternateButton,
            (NSString *)otherButton
            );
    }
    return result;
}

如果您想要C符号,请将文件命名为MONNSRunAlertPanel.m(objc),并相应地更改标题,

如果您想将它作为C ++符号,只需将文件命名为MONNSRunAlertPanel.mm(objc ++)。

假设您使用的是默认编译器设置,我们的源代码将根据其文件扩展名进行编译。

最后,添加Foundation和AppKit以链接到必要的系统库。

然后你可以调用MONNSRunAlertPanel而不将Foundation.framework拖到你的C ++源代码中(因为CFString和NSString类型是桥接的)。