关于C#调用DLL导致代码崩溃,调试程序结束(非托管代码在缓冲区溢出)
最近遇到一个调用dll的问题,在调试过程中,调试时不知道什么原因导致代码直接崩溃从而调试结束,下面就看一下例子
```csharp
[DllImport(@"C:\HBB\Interface.dll")]
public static extern int Abocs(StringBuilder strIn, StringBuilder strOut);
public string OnPay()
{
LogManager.Info("调用DLL开始-----------------------------------------------分割线: ");
InPut = "入参";
StringBuilder sb = new StringBuilder();
StringBuilder OutPay =new StringBuilder();
sb.Append(InPut);
int state = Abocs(sb, OutPay);
LogManager.Info("出参: " + OutPay.ToString());
return OutPay.ToString();
}
以上例子,是在运行到 `int state = Abocs(sb, OutPay);
`获取出参时遇到的,最后的解决方法是,给 StringBuilder 添加了长度,也就是 `OutPay.Length = 200;`
这里要注意根据出参返回的长度,适度的调节大小,我最开始添加的是 `OutPay.Length = 20000;`
这时依旧会导致代码报错,就导致绕了一个大圈,非常的绝望!