c#与IDL混编问题

来源:互联网 发布:男生衣服品牌知乎 编辑:程序博客网 时间:2024/06/05 06:24

将原有的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库文件的问题,程序会首先调用当前目录下的库文件然后才去环境变量中搜索,可能其中有什么问题

 

 

 文章仅为记录备用

0 0
原创粉丝点击