相关疑难解决方法(0)

如何在C#中处理null或者可选的dll struct参数

如何struct使用pinvoke 处理从C#调用的dll方法中的可选参数?例如,lpSecurityAttributes此处参数应该null在不存在时传递.

正确的传递方式struct似乎正在使用ref,但它不能有可选参数,或者null总的来说.

有什么方法可以达到这个目的?

c# null pinvoke interop optional-parameters

13
推荐指数
1
解决办法
1172
查看次数

如何为pinvoke调用的结构分配空值?

我想打电话给LsaOpenPolicy,它需要一个LSA_OBJECT_ATTRIBUTES结构。我正在使用来自pinvoke.net的结构定义。该结构具有领域public LSA_UNICODE_STRING ObjectName;

LSA_OBJECT_ATTRIBUTESMSDN文章说:

当您调用时LsaOpenPolicy,将此函数的成员初始化为NULL或零,因为该函数不使用该信息。

特别是:

对象名

    应该为NULL

虽然我可以将LSA_OBJECT_ATTRIBUTESstruct 的其他字段分配给IntPtr.Zero(或仅将其分配给0值类型),但看不到的方法ObjectName。特别,

无法将类型'System.IntPtr'隐式转换为'LSA_UNICODE_STRING'

在这种情况下我该怎么办?我应该初始化LSA_UNICODE_STRING长度为零(长度0,最大长度0,空/空缓冲区)的a吗?我应该更改LSA_OBJECT_ATTRIBUTES定义以便该字段为IntPtr吗?我应该使它为可空值并分配null给该字段吗?

我对内存管理的经验很少,因此对于可能导致内存泄漏的任何事情我都非常警惕。

c# pinvoke struct marshalling

5
推荐指数
1
解决办法
1382
查看次数

标签 统计

c# ×2

pinvoke ×2

interop ×1

marshalling ×1

null ×1

optional-parameters ×1

struct ×1