gpt4 book ai didi

c++ - 如何从 D DLL 返回 C 结构?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:16:20 24 4
gpt4 key购买 nike

我有用D 编写的库,它可以编译为带有C 接口(interface)的DLL。当我尝试返回一个 struct 时,我得到了 undefined reference to 'fooFunc()'

从 D 库返回 C struct 的正确方法是什么?


这是我的 D DLL 代码:

// Earlier in source code
struct FooStruct {
int m = 0;
}

// ...

// In main()
export extern(C) FooStruct fooFunc() {
return FooStruct();
}

这是我的(C++)代码,它使用了上述代码的已编译 DLL:

// Header
typedef struct {
int m = 0;
} FooStruct;

FooStruct fooFunc();

// ...

// In main()
FooStruct foo = fooFunc();

最佳答案

您的代码几乎没有任何问题。

您缺少的是:extern "C"FooStruct fooFunc(); 在您的 C++ 代码中。和D一样,C++也需要开发者标记C函数。

一旦我做了这个改变,我就很容易地编译并链接了这两个:

foo.d:

// Earlier in source code
struct FooStruct {
int m = 0;
}

// ...

// In main()
export extern(C) FooStruct fooFunc() {
return FooStruct();
}

foo.cpp:

#include <iostream>

// Header
typedef struct {
int m;
} FooStruct;

extern "C" FooStruct fooFunc();

using namespace std;

int main() {
FooStruct foo = fooFunc();
cout << foo.m << endl;
return 0;
}

编译&链接:

dejan@mrak$ dmd -c foo.d -offood.o
dejan@mrak$ g++ -o foocxx.o -c foo.cpp
dejan@mrak$ gcc -o foo food.o foocxx.o -lphobos2 -lstdc++
dejan@mrak$ ./foo
0

关于c++ - 如何从 D DLL 返回 C 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33174826/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com