C#调用 非托管C++ dll 传入Stringbuilder、ref string 、 ref char 等都报错,如mscorlib.dll 异常、其他信息: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏 等等,后来发现是dll 生成后一直没更新,放错位置了。。。 = =||
不过也学习了一下编译器及类型相关的知识,整理如下:
1、 cl.exe /Gz 参数指定编译为 __stdcall 调用方式,默认为 __cdecl
2、C#中的char是两个字节
http://msdn.microsoft.com/zh-cn/library/x9h8tsay(v=vs.80).aspx
| 类型 | 范围 | 大小 | .NET Framework 类型 |
|---|---|---|---|
| char |
U+0000 到 U+ffff |
16 位 Unicode 字符 |
| 类型 |
范围 |
大小 |
.NET Framework 类型 |
|---|---|---|---|
| byte |
0 到 255 |
无符号 8 位整数 |

本文介绍了C#调用非托管C++ DLL时遇到的问题,如传入传出字符串类型的错误,以及解决方法。重点讨论了C++ DLL中不同数据类型与C#的对应转换,如HANDLE转System.IntPtr,CHAR转System.Char等,并提到了C#中使用StringBuilder和ref关键字的情况。同时,强调了DLL文件放置位置的错误可能导致的内存访问异常问题。
最低0.47元/天 解锁文章
1943

被折叠的 条评论
为什么被折叠?



