【问题标题】:Error when using dllexport?使用 dllexport 时出错?
【发布时间】:2012-03-16 02:15:30
【问题描述】:

我想使用 dllexport 导出函数。但是我在编译器“错误C4439:'WrappedC':签名中具有托管类型的函数定义必须具有__clrcall调用约定”时遇到错误。

我在头文件(.h)中的代码是:

extern "C" 
{

__declspec(dllexport) int __stdcall ABC(int i);
__declspec(dllexport) char* __stdcall C(int i);
__declspec(dllexport) array<char>^ __stdcall WrappedC(int i) ;

}

我曾尝试将 _stdcall 更改为 __clrcall 但它又犯了一个错误:

error C3395: 'WrappedC' : __declspec(dllexport) cannot be applied to a function with the __clrcall calling convention

我在网上搜索过,但还没有解决。

谢谢,

T&T集团

【问题讨论】:

    标签: c++ .net managed-c++ dllexport


    【解决方案1】:

    编译器已经告诉你问题出在哪里了。

    __declspec(dllexport) array<char>^ __stdcall WrappedC(int i)
    

    您不能使用__declspec(dllexport),因为该函数正在使用clr

    array&lt;char&gt;^ 几乎是它抱怨的部分,因为它不是本机代码。

    【讨论】:

    • 哎呀!我知道我忘记了什么。您可以将函数声明为 public,但不能在非托管程序中使用。
    • @MMavipc 啊,真的。我的错。
    • @Aleks:我想导出返回类型是托管类型的函数,你能给我一些代码示例吗?这是我第一次使用 dllexport,所以我很愚蠢^^。非常感谢!
    • 其实我相信这可能是相关的,如果不一样的话:stackoverflow.com/questions/4546425/… 基本上就像我说的那样,摆脱 __declspec 和 __stdcall 并公开:一开始。
    • 也许这篇文章能带来一些启发codeproject.com/Articles/6242/…
    猜你喜欢
    • 2021-09-17
    • 2018-08-05
    • 1970-01-01
    • 2020-01-28
    • 2020-01-22
    • 2012-04-14
    • 2016-03-25
    • 1970-01-01
    相关资源
    最近更新 更多