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

时间:2009-07-20 20:40:50

标签: c# visual-studio-2008

我在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);

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

4 个答案:

答案 0 :(得分:2)

传递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);

答案 1 :(得分:1)

使用StringBuilder对象作为字符串参数。

答案 2 :(得分:0)

你能使用ref关键字吗?

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

通过引用http://www.yoda.arachsys.com/csharp/parameters.html

,可以详细解释传递变量的方法

答案 3 :(得分:0)

听起来您需要通过外部代码设置名称值。我已经有一段时间做了任何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);