c# - 通过引用将字节从 C# 传递到 C++/CLI 包装器以调用 InterlockedOr8 函数
问题描述
我试图通过引用从 C# 传递字节,以便我可以在它们上调用原子操作InterlockedOr8。我在 C++ 中有以下静态库:
按位.h:
char EightBitOr(char volatile* destination, char value);
按位.cpp:
#include "Bitwise.h"
char EightBitOr(char volatile* destination, char value)
{
return InterlockedOr8(destination, value);
}
我从这个 C++/CLI 包装 DLL 调用它:
包装器.h:
#include "..\Bitwise\Bitwise.h"
using namespace System;
namespace Wrapper {
public ref class Bitwise
{
public:
static char InterlockedEightBitOr(volatile char* destination, char value);
};
}
包装器.cpp:
#include "Wrapper.h"
char Wrapper::Bitwise::InterlockedEightBitOr(volatile char* destination, char value)
{
return EightBitOr(destination, value);
}
我正在尝试从 .NET 5.0 (Core) C# 控制台应用程序调用包装器,如下所示:
var map = new byte[268435456];
Bitwise.InterlockedEightBitOr(ref map[0], (byte)1);
但我收到以下错误:
CS0570 语言不支持“Bitwise.InterlockedEightBitOr(sbyte*, sbyte)”
我还注意到包装器已将方法签名转换为sbyte Bitwise.InterlockedEightBitOr(sbyte* destination, sbyte value);
,而我更愿意传递无符号字节,但我不确定如何更改此行为。无论如何,我想知道是否有人知道我是否可以通过引用将字节传递到这个 CLI 包装器中?我需要做出哪些改变?
解决方案
推荐阅读
- angular - 角上的图标
- python - 在 Python 中拆分数据?
- php - 发布存档页面 - If else 语句高级自定义字段
- r - R:使用 ggplot 增加图例项之间的垂直间距
- r - 将截断的二项分布拟合到 R 中的数据
- vb.net - 不支持 ITextSharp 导出的 PDF 或损坏了 Visual Basic
- jenkins - Jenkinsfile:如何打印布尔值?
- rust - 尽管有适当的特征绑定,但特征相关的 const 在特征定义上下文中不可用
- c++ - 在 Intel MyriadX 和 Raspberry Pi 4B 上使用 OnnxRuntime 和 OpenVINO 时内存损坏
- qt - 从插件中读取当前的 Qt Creator 主题