我有几个从本机 .dll 导入的方法,使用以下语法:
internal static class DllClass {
[DllImport("Example.dll", EntryPoint = "ExampleFunction")]
public static extern int ExampleFunction([Out] ExampleStruct param);
}
现在,因为我指定param
as [Out]
,我希望以下片段至少之一是有效的:
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);
我已经设法通过将第一个片段重写为以下代码来解决这个问题,但这感觉有点多余。
internal static class DllClass {
[DllImport("Example.dll", EntryPoint = "ExampleFunction")]
public static extern int ExampleFunction([Out] out ExampleClass param);
}
我读了C# 中的 [Out] 和 out 有什么区别? https://stackoverflow.com/q/16835906/1661358因为接受的答案表明[Out]
and out
在上下文中是等效的,这让我想知道为什么它对我不起作用以及我的“解决方案”是否合适。
我应该同时使用两者吗?我应该只使用out
?我应该只使用[Out]
?