dll中的函数具有以下原型
void Foo(int arg1, int& arg2);
问题是,如何在C中声明函数原型?
声明是否合法?
void Foo(int, int*);
答案 0 :(得分:8)
声明是否合法?
它是,但它没有声明相同的功能。如果您需要C API,则无法使用引用。坚持指针,并确保该功能具有C连接:
extern "C" void Foo(int, int*) {
// Function body
}
如果您无法修改DLL代码,则需要为其编写一个C ++包装器,以便公开适当的C API。
答案 1 :(得分:5)
你需要一个适配器,它包含一个C ++转换单元和一个可以从C和C ++使用的头文件,如下所示(当然使用更好的名称):
<强> adapter.h:强>
#ifndef ADAPTER_H
#define ADAPTER_H
#endif
#ifdef __cplusplus
extern "C" {
#endif
void adapter_Foo(int arg1, int *arg2);
// more wrapped functions
#ifdef __cplusplus
}
#endif
#endif
<强> adapter.cpp:强>
#include "adapter.h"
// includes for your C++ library here
void adapter_Foo(int arg1, int *arg2)
{
// call your C++ function, e.g.
Foo(arg1, *arg2);
}
您可以将此适配器编译为单独的DLL,也可以将其作为主程序的一部分。在您的C代码中,只需#include "adapter.h"
并致电adapter_Foo()
而不是Foo()
。