__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#)的主要内容,如果未能解决你的问题,请参考以下文章
如何从 CLI 快速重命名 macOS 或 linux 上的文件?
Heroku CLI 登录失败并出现错误“错误:ENOENT:没有这样的文件或目录,打开 'H:/_netrc'”