c#调用c写的dll出错,求大神指导!!!

allenltiverson 2012-11-29 06:51:40


[DllImport("__BANKER.dll", EntryPoint = "getdata", SetLastError = true, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern double getdata(StringBuilder sb, int nLen);



这是c写的dll代码声明

extern "C" __declspec(dllexport) double zhuang(char *array,int N);


结果:
“尝试读取或写入受保护的内存,这通常表明其他内存已损坏。。。。”
网上搜索很多是类型的问题,之前C#用的是char[],出问题,现在改成string ,stringbuilder还是这样。。。。
...全文
194 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
allenltiverson 2012-12-01
  • 打赏
  • 举报
回复
引用 10 楼 likedefly 的回复:
char*貌似对应byte[]
网上也有人提供这种方法,但是依然如此,算了,结贴
likedefly 2012-11-30
  • 打赏
  • 举报
回复
char*貌似对应byte[]
allenltiverson 2012-11-30
  • 打赏
  • 举报
回复
引用 6 楼 likedefly 的回复:
EntryPoint = "getdata",可以使用depend工具看对应名称是什么就写什么,至于你这边的方法命名可以随你便。有一点要注意,方法的参数类型和顺序有一定的规定,需要你自己测试。
dll是我自己写的,就是用的char *
allenltiverson 2012-11-30
  • 打赏
  • 举报
回复
引用 7 楼 zfjclark 的回复:
C# code??12 [DllImport("__BANKER.dll", EntryPoint = "getdata", SetLastError = true, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern dou……
指定的非托管类型只对只读字段有效?
zfjclark 2012-11-30
  • 打赏
  • 举报
回复
   [DllImport("__BANKER.dll", EntryPoint = "getdata", SetLastError = true, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern double getdata(  [MarshalAs(UnmanagedType.ByValTStr,SizeConst=32)] string sb, int nLen);
UnmanagedType.ByValTStr是把托管代码转化为非托管代码的数组,SizeConst是数组长度。你可以这样试试
likedefly 2012-11-29
  • 打赏
  • 举报
回复
EntryPoint = "getdata",可以使用depend工具看对应名称是什么就写什么,至于你这边的方法命名可以随你便。有一点要注意,方法的参数类型和顺序有一定的规定,需要你自己测试。
allenltiverson 2012-11-29
  • 打赏
  • 举报
回复
引用 4 楼 allenltiverson 的回复:
引用 3 楼 devmiao 的回复:EntryPoint = "getdata" => EntryPoint = "zhuang" 这都被你发现了。。。但是其实入口函数跟调用函数没什么关系呀。
zhuang那个函数名写错了没改
allenltiverson 2012-11-29
  • 打赏
  • 举报
回复
引用 3 楼 devmiao 的回复:
EntryPoint = "getdata" => EntryPoint = "zhuang"
这都被你发现了。。。但是其实入口函数跟调用函数没什么关系呀。
devmiao 2012-11-29
  • 打赏
  • 举报
回复
EntryPoint = "getdata" => EntryPoint = "zhuang"
allenltiverson 2012-11-29
  • 打赏
  • 举报
回复
引用 1 楼 devmiao 的回复:
public static extern double getdata(byte[] sb, int nLen); byte[] sb = System.Text.Encoding.Default.GetBytes(字符串); nLen = sb.Count();
问题依旧。。。
devmiao 2012-11-29
  • 打赏
  • 举报
回复
public static extern double getdata(byte[] sb, int nLen); byte[] sb = System.Text.Encoding.Default.GetBytes(字符串); nLen = sb.Count();

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧