从Swift调用C ++功能[英] Call a C++ function from Swift

本文是小编为大家收集整理的关于从Swift调用C ++功能的处理方法,想解了从Swift调用C ++功能的问题怎么解决?从Swift调用C ++功能问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我应该如何调用Swift文件中的C ++函数(不涉及类)? 我尝试了:

in somecfunction.c :

void someCFunction() {
    printf("Inside the C function\n");
}

void aWrapper() {
    someCplusplusFunction();
}

in somecpluplusfunction.cpp :

void someCplusplusFunction() {
    printf("Inside the C++ function");
}

in main.swift :

someCFunction();
aWrapper();

在 bridging-header.h 中:

#import "someCFunction.h"
#import "someCplusplusFunction.h"

我找到了这个答案非常有用,但我仍然无法正常工作. 你能把我指向正确的方向吗?

谢谢!

推荐答案

标题是什么样的?

如果要明确设置C ++中C兼容函数的链接类型,则需要告诉C ++编译器SO:

// cHeader.h

extern "C" {
    void someCplusplusFunction();
    void someCFunction();
    void aWrapper();
}

请注意,这不是有效的C代码,因此您需要在预处理器宏中包装extern "C"声明.

在OS X和iOS上,您可以在编译C ++源时要链接为C代码的代码,您可以使用__BEGIN_DECLS>> C代码.

因此,看起来像:

// cHeader.h

__BEGIN_DECLS
void someCplusplusFunction();
void someCFunction();
void aWrapper();
__END_DECLS

编辑:正如Ephemer提到的,您可以使用以下预处理器宏:

// cHeader.h

#ifdef __cplusplus 
extern "C" { 
#endif 
void someCplusplusFunction();
void someCFunction();
void aWrapper();
#ifdef __cplusplus 
}
#endif

本文地址:https://www.itbaoku.cn/post/359287.html