__vectorcall 通过 C++/CLI 或 PInvoke (C#)

Posted

技术标签:

【中文标题】__vectorcall 通过 C++/CLI 或 PInvoke (C#)【英文标题】:__vectorcall via C++/CLI or PInvoke (C#) 【发布时间】:2016-09-27 01:16:34 【问题描述】:

有什么方法可以通过 PInvoke 或 C++/CLI 调用使用 __vectorcall 调用约定的 C++ 函数?到目前为止,我的尝试表明这是不可能的(还)。我想我会在这里询问是否有人知道有创意的方式。

【问题讨论】:

【参考方案1】:

您可以在 C++ 中创建一个转发函数,该函数以正常方式 (cdecl) 获取其参数,然后将这些参数转发到 __vectorcall 中期望它们的函数。

【讨论】:

【参考方案2】:

您不能使用 p/invoke 调用 __vectorcall,但可以使用 C++/CLI。

在 C++/CLI 中这样做并没有什么特别之处。 C++编译器有支持,你可以简单地用这个调用约定声明函数并调用它们。

【讨论】:

当使用 /clr 声明 __vectorcall 函数时,我收到编译器警告。它只是将函数转换为 __stdcall:i.gyazo.com/7bdf18d6078a9ac327b269a7f0f90d50.png 您不能在托管函数中使用向量调用,但在非托管函数中应该没问题。

以上是关于__vectorcall 通过 C++/CLI 或 PInvoke (C#)的主要内容,如果未能解决你的问题,请参考以下文章

c++/cli 仅向托管类公开内部成员

如何从 CLI 快速重命名 macOS 或 linux 上的文件?

Heroku CLI 登录失败并出现错误“错误:ENOENT:没有这样的文件或目录,打开 'H:/_netrc'”

将 C++/CLI 类方法作为 C 函数指针传递

在CLI中执行时,Symfony`url()`Twig函数如何确定绝对路径?

Visual Studio 2010 在编译 C++/CLI 项目时出现奇怪的错误