我需要一个非常简单的警告框,如NSRunAlertPanel()
,但这适用于C ++嵌入式64位应用程序,我不知道Cocoa或Objective-C。
关于如何做到这一点的任何想法?
答案 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类型是桥接的)。