我正在为 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/