【问题标题】: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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多