c# - 使用 C++ 包装器时如何访问 C# .dll 属性

标签 c# c++ command-line-interface wrapper

我正在为 C# .dll 编写一个包装器,以供 C++ 程序使用。我可以使用这些功能,但我不确定如何访问/设置包装器中的属性以便可以访问它们。

属性是各种不同的数据类型,有些是只读的,有些是保护写的,有些是读写的。

我精简了一些代码以展示我是如何设置的。但我无法弄清楚如何做这些属性并且没有运气谷歌搜索它。也许找错词了?

我的代码: 语言:

public class RFIDInterface
{
    public bool TagDetected
    {
        get;
        private set;
    }

    public Byte[] TagData
    {
        get;
        set;
    }

    public RFIDInterface()
    {
         ...
    }

    public bool Connect()
    {
         ...
    }

}

.H文件:

class RFIDWrapperIFacePrivate;

class __declspec(dllexport) RFIDWrapperIFace
{
private:
    RFIDWrapperIFacePrivate* _private;

public:
    // Constructors
    RFIDWrapperIFace();

    // destructors
    ~RFIDWrapperIFace();

    // Connection functions
    bool Connect();

    // properties
    ???????
};

.C文件:

class RFIDWrapperIFacePrivate
{
public:
    msclr::auto_gcroot<RF182CInterface::RFIDInterface^> rf182CInterface;
};

// default constructor
RFIDWrapperIFace::RFIDWrapperIFace()
{
    _private = new RFIDWrapperIFacePrivate();
    _private->rf182CInterface = gcnew RF182CInterface::RFIDInterface();
}

// deconstructor
RFIDWrapperIFace::~RFIDWrapperIFace()
{
    delete _private;
}

// Connects to the RF182C device
// returns: True if successful
bool RFIDWrapperIFace::Connect()
{
    return _private->rf182CInterface->Connect();
}

// Transmits a string to the RF182C device
// Message: the message to transmit
// returns: True if successful
bool RFIDWrapperIFace::TransmitMessage(const char* Message)
{
    return _private->rf182CInterface->TransmitMessage(gcnew System::String(Message));
}

// properties
?????

最佳答案

在 .NET Framework 版本 4+ 中,已删除运行时支持以强制执行 Deny、RequestMinimum、RequestOptional 和 RequestRefuse 权限请求。

类的安全属性会有所不同。

[ComVisible(true)]
//[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public class RFIDInterface
{
    //[MarshalAs(UnmanagedType.Bool)]
    public bool TagDetected;
    {
        // No attribute, default access
        get;

        [SecurityPermissionAttribute(SecurityAction.Deny, UnmanagedCode = true)] 
        private set;
    }

    [MarshalAs(UnmanagedType.BStr)]
    public string TagData;
}

根据文档“安全属性声明的安全信息存储在属性目标的元数据中,并在运行时由系统访问。安全属性仅用于声明性安全。”

MSDN page具有可用安全属性的完整列表

关于c# - 使用 C++ 包装器时如何访问 C# .dll 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48995286/

相关文章:

c++ - 如何在初始化列表中初始化普通数组成员变量?

linux - 如何将路径列表可视化为树?

c# - Bootstrap 模态对话框不会出现在屏幕中央

头文件中的 C++14 通用 lambda

c# - WebSocket4Net - 在 websocket 上收到 'return' 消息

c++ - 类中 std::sort 的比较函数无法编译

Heroku CLI 突然崩溃

php - 与守护程序文件 (JAXL) 交互

c# - 循环和更改列表 - 删除并不总是有效

c# - Cassandra get_range_slice