C# 如何定义新的指针结构
C# How to define new pointer struct?
此结构定义于 http://msdn.microsoft.com/en-us/library/windows/hardware/ff541621%28v=vs.85%29.aspx
typedef struct _FILTER_MESSAGE_HEADER {
ULONG ReplyLength;
ULONGLONG MessageId;
} FILTER_MESSAGE_HEADER, *PFILTER_MESSAGE_HEADER;
我在C# code
中将其定义如下:
[StructLayout(LayoutKind.Sequential)]
public struct FILTER_MESSAGE_HEADER {
public uint replyLength;
public ulong messageId;
};
我只在C# code
中定义FILTER_MESSAGE_HEADER,PFILTER_MESSAGE_HEADER不是。
我应该如何定义PFILTER_MESSAGE_HEADER?
P/S:我想定义PFILTER_MESSAGE_HEADER在函数中使用此结构。
您不必(不能)定义PFILTER_MESSAGE_HEADER
。 只需将其指定为out
或ref
即可。
[DllImport("foo")]
void SomeMethod(ref FILTER_MESSAGE_HEADER lpMessageBuffer);
如果您对FilterGetMessage
特别感兴趣,我不确定从中导出任何dll,但是一种可能的签名如下:
[DllImport(fltmgr, CharSet=CharSet.Unicode, ExactSpelling=true, PreserveSig=false)]
void FilterGetMessage(
CommunicationPortSafeHandle hPort,
ref FILTER_MESSAGE_HEADER lpMessageBuffer,
uint dwMessageBufferSize,
IntPtr lpOverlapped);
我使用 PreserveSig
在发生故障时自动将HRESULT
转换为异常,CharSet
规范是防御性的,导致需要ExactSpelling
。 CommunicationPortSafeHandle
将是一个基于FilterConnectCommunicationPort
文档从SafeHandleMinusOneIsInvalid
继承的类。
您可以将此签名用作:
FILTER_MESSAGE_HEADER header;
FilterGetMessage(hFilter, ref header,
Marshal.SizeOf(typeof(FILTER_MESSAGE_HEADER)), IntPtr.Zero);
相关文章:
- 如何在 C# 中映射双 C 结构指针?
- 指针或结构的矢量
- MSVC将仅移动结构参数解释为指针
- 如何访问指针结构的成员变量?
- 如何将变量从变量传递到指针结构对象
- 如何在函数中检索指针结构
- C :变量的点地址至指针结构成员的地址
- C++指针结构不会被删除
- 初始化指针结构 - 内存中的外观
- C++指针结构和多线程
- c++中指针结构的运算符重载
- 为什么我不能转发声明指针结构?
- C# 如何定义新的指针结构
- 如何处理大型指针结构
- 我怎么能写一个函数的定义在模板类中声明返回指针结构对象
- 我如何编程指针结构或类变量在c++
- 具有指针结构的类所需的析构函数
- 为什么在非指针结构上进行类型转换会出现语法错误
- 语法:做binary_search (STL)排序向量的指针结构
- /a.检测到Glibc.out: munmap_chunk():无效指针- c++结构体的动态数组