【问题标题】:Getting Cocoa function from C++从 C++ 获取 Cocoa 函数
【发布时间】:2013-07-12 15:33:12
【问题描述】:
在这个问题的答案中:get logged in user 接受的答案使用如下所示的 Delphi 代码来访问 Cocoa 函数 NSUserName。
function NSUserName: Pointer; cdecl; external '/System/Library/Frameworks/Foundation.framework/Foundation' name _PU +'NSUserName';
您将如何在 C++Builder 中执行此操作?
【问题讨论】:
标签:
c++builder
firemonkey
【解决方案1】:
这回答了问题,值得赏金
解决方法是在 C++ 中使用 dlopen 和 dlsym 导入 NSUserName:
void* (*NSUserName)();
String UserName;
void *hLib = dlopen("/System/Library/Frameworks/Foundation.framework/Foundation", RTLD_GLOBAL);
if(hLib)
{
NSUserName = (void*(*)())dlsym(hLib, "NSUserName");
CFStringRef srUserName = (CFStringRef)NSUserName();
if(srUserName)
{
UserName = CFStringGetCStringPtr(srUserName, 0);
}
dlclose(hLib);
}
可以通过添加头文件直接在 C++ Builder 中使用 NSString (Cocoa Type):
#include <Macapi.Foundation.hpp> // note that this will cause 8080 warnings if you have this warning turned on (unused variables)
现在我可以使用 NSString 代替 CFStringRef(核心基础类型):
UserName = TNSString::Wrap(NSUserName())->UTF8String();