c++ - 如何从 Objective C 调用我的 Qt/C++ Dylib?

标签 c++ objective-c xcode qt dylib

我用 Qt/C++ 编译了一个 dylib。我创建了一个名为 test() 的简单类方法,它读取字符串输入并返回带有 "-response" 的字符串输出。现在,我如何在 XCode 7(默认的 Cocoa 应用程序)中将其加载到 Objective C 中,并使其通过 NSLog() 发出 test()

这就是我的构建文件夹在 Qt/C++ 中的样子。

enter image description here

最佳答案

您需要使用 Objective-C++ 类,它是 Objective-C 和 C++ 的混合体。

在主要 Objective-C 项目中使用一个或多个 Objective-C++ 类的最大挑战是避免将 C++ 类暴露给 Objective-C 类。因此,您需要在 Objective-C++ 头文件中避免使用 C++,而只在实现文件中包含 C++。

例如:

CppWrapper.h:

#import <Foundation/Foundation.h>

@interface CppWrapper : NSObject
- (BOOL)callCppMethodA:(int)param;
@end

CppWrapper.mm:

#import "CppWrapper.h"
#import "cppclass.h"    // C++

@interface CppWrapper()
{
    cppclass *_cppclass;    // C++
}
@end

@implementation CppWrapper

- (id)init
{
    self = [super init];
    if (self) {
        _cppclass = new cppclass();    // C++
    }
    return self;
}

- (void)dealloc
{
    delete _cppclass;    // C++
}

- (BOOL)callCppMethodA:(int)param
{
    return _cppclass->methodA(param);    // C++
}

@end

像这样使用它:

CppWrapper *cppWrapper = [CppWrapper new];
[cppWrapper callCppMethodA:123];

关于c++ - 如何从 Objective C 调用我的 Qt/C++ Dylib?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34121291/

相关文章:

c++ - 如何确保一次只有一个进程访问共享内存

c++ - 删除运算符

ios - 如何水平居中两个标签?

iphone - CAScrollLayer 不滚动!

ios - Xcode 内存图调试图标未显示

ios - 从 iOS 应用程序 (Swift) 中的 S3 存储桶中删除文件

ios - 按键排序基于 NSDictionary 的 UITableView

ios - 在 swift 中使用递减变量作为 NSTimeInterval

c++ - 自动创建文件名 C++

c++ - 将 RTP vp8 有效负载数据包保存到 .webm 文件