我在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);
如何通过引用传递此参数?
答案 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);
,可以详细解释传递变量的方法
答案 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);