繁体   English   中英

如何通过引用C#中的托管代码来传递参数?

[英]How do I pass a parameter by reference to managed code in C#?

我在C#Visual Studio 2008中使用具有以下功能的DLL:

[DllImport("slpapi62", EntryPoint = "_SlpGetPrinterName@12")]
public static extern int SlpGetPrinterName(int nIndex, string strPrinterName, int nMaxChars);

调用此函数时,假设strPrinterName返回一个字符串。

string name = "";
SlpGetPrinterName(0, name, 128);

如何获得此参数以通过引用传递?

传递StringBuilder对象而不是字符串:

[DllImport("slpapi62", EntryPoint = "_SlpGetPrinterName@12")]
public static extern int SlpGetPrinterName(int nIndex, StringBuilder strPrinterName, int nMaxChars);

调用它:

StringBuilder name = new StringBuilder(128);
int value = SlpGetPrinterName(0, name, name.Capacity);

使用StringBuilder对象作为string参数。

可以使用ref关键字吗?

string name = "";
SlpGetPrinterName(0, ref name, 128);

有关通过引用传递变量的详细说明,请参见http://www.yoda.arachsys.com/csharp/parameters.html

听起来您需要通过外部代码设置名称值。 自完成任何pInvoke以来已经有一段时间了,但是我相信以下是正确的签名:

[DllImport("slpapi62", EntryPoint = "_SlpGetPrinterName@12")]
public static extern int SlpGetPrinterName(int nIndex, out string strPrinterName, int nMaxChars);

注意“ string strPrinterName”之前的“ out”关键字。 然后,您可以这样称呼它:

string name;
SlpGetPrinterName(0, out name, 128);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM