【发布时间】:2014-12-26 12:13:03
【问题描述】:
我有几个从本地 .dll 导入的方法,使用以下语法:
internal static class DllClass {
[DllImport("Example.dll", EntryPoint = "ExampleFunction")]
public static extern int ExampleFunction([Out] ExampleStruct param);
}
现在,因为我将 param 指定为 [Out],所以我预计以下 sn-ps 中至少有一个是有效的:
ExampleStruct s;
DllCass.ExampleFunction(s);
ExampleStruct s;
DllCass.ExampleFunction([Out] s);
ExampleStruct s;
DllCass.ExampleFunction(out s);
但是,它们都不起作用。我发现让它工作的唯一方法是初始化 s。
ExampleStruct s = new ExampleStruct();
DllCass.ExampleFunction(s);
我已经设法通过将第一个 sn-p 重写为以下代码来解决这个问题,但这感觉有点多余。
internal static class DllClass {
[DllImport("Example.dll", EntryPoint = "ExampleFunction")]
public static extern int ExampleFunction([Out] out ExampleClass param);
}
我读过What's the difference between [Out] and out in C#? 并且因为接受的答案指出[Out] 和out 在上下文中是等效的,这让我想知道为什么它对我不起作用以及我的“解决方案”是否合适.
我应该同时使用吗?我应该只使用out 吗?我应该只使用[Out]吗?
【问题讨论】:
标签: c# pinvoke marshalling out