当前位置:编程学习 > C#/ASP.NET >>

C#调用C++DLL时出错,提示“尝试读取或写入受保护的内存,...”

自己编译了一个C++DLL,内部含有读写文件操作,和指针操作,但是应该都用完就释放了。
现在用C#做了一个界面,输入参数后通过函数传递给DLL运算。但是每次都是第一次执行的时候没有任何异常,第二次执行的时候就出现错误,提示“尝试读取或写入受保护的内存,这通常表明内存以损坏”。请各位帮忙看看是什么问题,在此贴出传值函数
C#中
调用如下:
SingleAssign.Assign(fileFlag, emitpositionx, emitpositiony, emitpositionz,
                    f, power, emitzengyi, rejihuax, rejihuay, rejihuaz, rezengyi, limitnum,
                     reflectnum,transmitnum, diffractnum,ptrindoorstuff, ptrwall, ptrxingtai, zbx, zby, zbz,
                    simulatearea, pointx, pointy, pointz, linestartx, linestarty, linestartz,
                     lineendx,lineendy, lineendz, pase, netsize, netheight);这个函数先赋值
SingleExecute.RTexecute();这个函数执行
C++中如下:
extern "C" _declspec(dllexport) void Assign(int fileflag, double emitantennaposx, double emitantennaposy, double emitantennaposz, 
double frequency, double power, double tgain, double reantennajihuax, double reantennajihuay, double reantennajihuaz,double regain, int maxlimitnumber, int rweight, int tweight, int dweight, char database1[100], char database2[100], char database3[100],         
double xmove, double ymove, double zmove, int areatype, double areapointx, double areapointy, double areapointz, double arealinestartx, double arealinestarty, double arealinestartz,
double arealineendx, double arealineendy, double arealineendz, double arealinestep, double meshgap, double meshhight)



不知道为什么只有第一次执行程序的时候是好的,第二次就不行了,提示错误,在执行这个语句时SingleExecute.RTexecute();提示如题的错误!


希望大家帮忙解答,万分感谢!!!!! --------------------编程问答-------------------- 看下c# dll函数定义, 尝试读取或写入受保护的内存 这个错误一般有几个原因:
1 参数越界,比如指向5字节的数,你只传了4字节;或指向的内存不固定,被.net移动.
2 参数类型不一致
3 要访问的内存或参数 未初始化.
--------------------编程问答-------------------- 调用约定指明CallingConvention.Cdecl --------------------编程问答-------------------- 确保你的对同一文件的读写操作,同一时间,只有唯一一个。如果是单线程,你操作完文件后,及时释放,是不影响第二次调用的。如果是多线程,可能第一个操作文件的动作还未完成,还未来得及释放,第二个操作文件的动作,已经跟上了,通常就会报这样的错。C#里有一个Mutex类,可以保证方法,同一时间,只有一个地方在调用它。其它所有调用,都得等这个调用结束后才能开始。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,