【发布时间】:2021-12-05 05:49:54
【问题描述】:
我的需要是我想从我的 cpp 代码中调用一个 swift 函数。为此,我尝试过使用桥接方法。当我尝试从 c 调用 swift 时,它正在工作。由于 C 和 C++ 相似,我在 C++ 中使用了相同的逻辑,但它不起作用。
编译此 CPP 代码会出现类似错误 未定义符号:sayHello() .
我的c和c++示例代码是这样的,
CToSwift-Bridging-Header.h
void callCpp();
extern void sayHello();
main.c/.cpp
#include <stdio.h>
#include "CToSwift-Bridging-Header.h"
int main(int argc, const char * argv[]) {
printf("Hello, Main!\n");
callCpp();
return 0;
}
void callCpp() {
printf("CPP: Hi This is C\n");
printf("CPP: Swift say hello to everyone !\n");
sayHello();
printf("CPP: Nice! ");
}
Testswift.swift
import Foundation
@_cdecl("sayHello")
func sayHello()
{
print ("Swift:Hello , Welcome to Swift")
}
在阅读了有关此概念的一些可用文档后,我了解到 Swift (Obj c) 和 C++ 没有直接关系,因为两者都是从 C 以不同的方式演变而来的。
但我的查询是
1] 我在这个桥接头方法中还缺少什么来从 C++ 代码调用 swift 函数吗?
2] 还有其他方法可以实现我的目标吗?
3] 编译 C++ 时能否将 swift 代码作为库或 dll 传递?
【问题讨论】:
-
C++ 不应该是
extern "C"吗?附:桥接头用于将C/Objective-C导入Swift。对于从Swift到C/Objective-C的导入,还有另一个标题<ModuleName>-Swift.h
标签: c++ swift objective-c macos bridging-header