海,
我有一个动态库加载器,它是用 C++ 编写的,但提供了与 C 兼容的 API。
该加载器可以加载以任何编程语言编写的模块。它们排列在一个命名列表中,可以请求其他模块的函数指针。现在,一个用 C 编写并用 C 编译器编译的模块获取任何其他模块的函数指针,这些模块是用 C++ 编写和编译的。
所以我的问题是:函数指针交叉编译器是否有效?我想我听说过__cdecl
一次,很久以前。我使用 Linux 64 位。
TIA
海,
我有一个动态库加载器,它是用 C++ 编写的,但提供了与 C 兼容的 API。
该加载器可以加载以任何编程语言编写的模块。它们排列在一个命名列表中,可以请求其他模块的函数指针。现在,一个用 C 编写并用 C 编译器编译的模块获取任何其他模块的函数指针,这些模块是用 C++ 编写和编译的。
所以我的问题是:函数指针交叉编译器是否有效?我想我听说过__cdecl
一次,很久以前。我使用 Linux 64 位。
TIA
// my C++ code ...
extern "C" {
void thisFunctionWillBeCallableFromC();
}
void butThisOneMayNot();
struct S
{
void thisDefinitelyWontBeCallableFromC(std::map<int, S>);
};
C++ 代码应声明具有extern "C"
可从 C 调用的链接的接口。
还是您的意思是由不同编译器生成的 C++ 代码?
函数指针在 C 和 C++ 之间是兼容的。
唯一的限制是,在 C++ 中使用时,您必须使用外部“C”链接声明 C 函数:
extern "C"
{
int foo();
}