将原有的IDL计算模块集成到新的环境中后在计算的时候出错(Attempted to read or write protected memory. This is often anindication that other memory is corrupt.),跟踪代码发现GetNamedData获取状态值时时出错。
_idl.ExecuteStr(_ComExp);
while(!bl)
{
Thread.Sleep(1000);
objectab = _idl.GetNamedData("a");
if(ab != null)
{
if (ab.ToString() == "1")
{
bl = true;
}
}
}
}
尝试更新IDL控件,问题小时,而新的问题是没有产出结果文件。又做了一些新的尝试,都出现不同的错误,例如在初始化IDL控件时
this.axIDLDrawWidget1.InitIDL((int)this.Handle);这句代码报错,
现在又在执行_idl.ExecuteStr(_ComExp);
报错说找不到IDL路径下的某个库文件,总之一头雾水
从头开始,新建一个新的工程,只包括刚出错的IDL模块,添加IDL控件,以及其他引用,运算成功,其中如果idlpath设置出错会在InitIDl时提示IDl没有找到idl.dll文件(是IDl自身提示)
this.axIDLDrawWidget1.IdlPath = @"C:\ProgramFiles (x86)\ITT\IDL71\bin\bin.x86\idl.dll";
this.axIDLDrawWidget1.InitIDL((int)this.Handle);
回想模块集成时没有发出此问题,在系统某个地方已经赋值???
直接启动模块
|
设置IDLPath |
初始化InitIDl |
结果 |
|
实验1 |
否 |
否 |
Attempted to read or write protected memory. This is often an indication th |
|
实验2 |
否 |
是 |
找不到idl.dll文件 |
|
实验3 |
是 |
否 |
Attempted to read or write protected memory. This is often an indication that other memory is corrupt. |
|
实验4 |
是 |
是 |
计算成功 |
|
|
|
|
|
|
通过主窗体调用IDL模块,主窗体设置IDLPath和InitIDL,IDL模块中没有,计算成功
将上午的经验转移到出问题的工程中结果….完全无效,原来程序该有的都有了,更让我不解的是,上午为测试新建的那个可以跑通的工程加入到项目中也不可以,作为启动项目来跑就可以,这还可以接受,令人发指的是现在单独也跑步起来了,真是崩溃。已经一天半了懒得再测了,直接将他找不到的库文件和exe文件放一起跑程序吧
oraConn = new OracleConnection(strConn);
这句话导致程序找不到idl.dll世界不大无奇不有真是无语了
通过IDLtest工程的测试发现debug下的几个IDL库文件的问题,程序会首先调用当前目录下的库文件然后才去环境变量中搜索,可能其中有什么问题
文章仅为记录备用