首页 > 解决方案 > 通过引用将字节从 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 包装器中?我需要做出哪些改变?

标签: c#c++.net.net-corevisual-c++

解决方案


推荐阅读