【问题标题】:Use a C struct in C++/CLI, calling conventions issue在 C++/CLI 中使用 C 结构,调用约定问题
【发布时间】:2012-06-18 10:30:44
【问题描述】:

我在我的 C++/CLI 项目中使用 lib_usb,我需要在我的托管 C++/CLI 代码中使用它的函数 usb_get_busses 和其他一些函数。

使用托管AutoPtr 创建usb_bus 结构如下:

AutoPtr<struct usb_bus> bus;

现在我需要调用usb_get_busses 函数,但是链接器似乎对调用约定不满意。 CLR 使用 clrcall 调用约定,显然 C 使用 __cdecl

usb_bus* usb_get_busses(void)

现在如何让自己能够在 C++/CLI 中使用 lib_usb?我是否必须创建 C++/CLI 包装器或其他东西?

链接器吐出这条消息:

错误 LNK2031: 无法为 "extern "C" 结构生成 p/invoke usb_bus * __clrcall usb_get_busses(void)" (?usb_get_busses@@$$J0YMPAUusb_bus@@XZ);缺少调用约定 元数据

【问题讨论】:

    标签: c c++-cli calling-convention


    【解决方案1】:

    __cdecl 根本没有指定。查看链接器错误 - 它清楚地指出__clrcall。尝试使用__cdecl 明确指定它。

    【讨论】:

    • 仅供参考 - 我的意思是 C 的调用约定是 __cdecl 而不是我的特定 c 函数已经用 __cdecl 明确声明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 2011-10-11
    • 2019-11-09
    • 1970-01-01
    相关资源
    最近更新 更多