C#调用带参动态库时一直报错?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#调用带参动态库时一直报错?相关的知识,希望对你有一定的参考价值。
“System.StackOverflowException”类型的未经处理的异常在 PayTest.dll 中发生
参考技术A ① 将 DLL引用方法的参数 换成 [MarshalAs(UnmanagedType.LPArray)] byte[] pindata;② 调用方法时 System.Text.Encoding.UTF8.GetBytes(json);
③ 不要用out 一般需要返回的参数 用指针 或者 ref 标识 ; 参考技术B C#调用C或C++的库需要传入指针
先定义
Intptr a = Marshal.AllocHGlobal(Marshal.SizeOf(传入变量));
Marshal.StructureToPtr(传入对象,a,false);
然后调用函数,传入参数用 a
最后
Marshal.FreeHGlobal(a); 参考技术C 栈溢出异常,一般为死循环造成。
另外看看你函数的声明,入参为什么也声明成out。最简单的就是联系api提供商,他们不给sample吗? 参考技术D 看这个报错是栈溢出。去搜索一下,vs2017增加程序栈空间试试看能不能解决。或者把调用时的参数放在堆中,也就是new一个出来。 第5个回答 2019-07-02 参数5个分别为
Int32, byte[], ref Int32, byte[], Int32
数组不要加ref,会引发错误,实际用途是用于改变数组首地址追问
你的回答好像和我的问题没什么很大的关系啊
以上是关于C#调用带参动态库时一直报错?的主要内容,如果未能解决你的问题,请参考以下文章