本机 Nuget 中的 cdecl 和 stdcall 调用约定

2024-01-21

我正在尝试构建一个本机 nuget 包,它提供了调用约定的支点,为 x86 构建提供了具有 cdecl 和 stdcall 约定的 DLL。 (大多数用户更喜欢 cdecl 调用约定,但 P/Invoke 这个库的 .NET 用户出于各种原因更喜欢 stdcall。)

My .autopkg包含 cdecl 和 stdcall 枢轴:

nuget
{
    [nuspec omitted for brevity]

    files {
            [Win32,cdecl] {
                lib: build\x86-cdecl\Debug\git2-0_21_0.lib;
                bin: build\x86-cdecl\Debug\git2-0_21_0.dll;
                symbols: build\x86-cdecl\Debug\git2-0_21_0.pdb;
            }

            [Win32,stdcall] {
                lib: build\x86-stdcall\Debug\git2-0_21_0.lib;
                bin: build\x86-stdcall\Debug\git2-0_21_0.dll;
                symbols: build\x86-stdcall\Debug\git2-0_21_0.pdb;
            }
    };
}

建设.nupkg使用本机 nuget 脚本似乎会成功,并且在标准 C 项目(具有 cdecl 调用约定的项目)中安装和使用 nuget 包也会成功。

但是,如果我创建一个新的 C 项目并将调用约定设置为 stdcall 并安装 nuget 包,则我不会获得库的 stdcall 版本。相反,安装了 cdecl 版本,但我无法链接。

我很乐观地认为 nuget 包管理器会检测我的项目的配置并使用适当的调用约定枢轴(就像它对处理器类型所做的那样),但这似乎并没有发生。我也没有提供手动选择调用约定的选项。然而事实是有isautopkg 配置中的一个枢轴让我认为我could选择一个。

我如何利用这个支点?


据我所知,这是完全不可能的。可悲的是,同样不可能获得帮助。

遗憾的是,Native Nuget 是一个几乎没有经过测试、几乎无法操作且完全不受支持的错失机会的荒地。唯一的答案就是根本不使用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

本机 Nuget 中的 cdecl 和 stdcall 调用约定 的相关文章

随机推荐