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#调用带参动态库时一直报错?的主要内容,如果未能解决你的问题,请参考以下文章

C# 查看动态库的方法

虹软人脸识别 - Android平台调用动态库时的常见错误解析

嵌入式开发——用C语言调用C++的动态库时函数指针为空

尝试在 AIX 中动态加载 Oracle 客户端库时出错

使用 dlopen 加载动态库时抛出未定义的符号

C#中如何调用动态链接库DLL