![](/img/trans.png)
[英]How do I pass a parameter into a C# code-behind method from my aspx page?
[英]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.