[DllImport("mymir.dll", CharSet=CharSet.Ansi ,SetLastError=true )]
static extern Int32 Encryption(string mydata, StringBuilder rTxt );下面的语句在线程中执行
int i=Encryption(mydata,Buffer);有时候可以通过 用时候就错误。 用try catch 也捕捉不到。
现在是不知道问题出在那里。 是DLL 调用不正确 还是 在线程中用DLl不正确
还是 DLl在线程中是不安全的,还是... 郁闷了
拜托各位 有没有知道的或者碰到过类似的,给点提示也行... 莫办法了

解决方案 »

  1.   

    帮忙解决下哦。 [email protected]
      

  2.   

    如果是未处理的“System.ExecutionEngineException”类型的异常这样的异常,你检查一下是不是你的DLL函数返回的值你定义的BUFF接受不下,这种类型的异常是编译引擎的异常,用trycatch是捕捉不到的。
    我建议还是好好查查你调用DLL的地方
      

  3.   

    如果将
    CharSet=CharSet.Ansi  改成  CharSet=CharSet.Unicode 或者 CharSet=CharSet.Auto 
    不出现错误, 但 dll 返回的值不对了...  还望高手解决下 分不够再+++
      

  4.   

    你的DLL是用.NET還是6.0寫的?非.NET程序,沒有StringBuilder。
      

  5.   

    Have a try![DllImport("mymir.dll", CharSet=CharSet.Ansi ,SetLastError=true )]
    static extern Int32 Encryption(StringBuilder mydata, StringBuilder rTxt );
      

  6.   

    Knight94(愚翁)  
    [DllImport("mymir.dll", CharSet=CharSet.Ansi ,SetLastError=true )]
    static extern Int32 Encryption(StringBuilder mydata, StringBuilder rTxt );
      这个我试了还是不行
      
    函数原型是怎么声明的。
     我怎么看原型啊?
      

  7.   

    你调得dll函数使用什么写的,如果是用c写的,把它的函数如何输出的贴出来。
      

  8.   

    我发现应该是那个DLL 在线程中的问题  如果是不开线程 或者是 1个线程
    没有出现问题 一但是多个线程 很容易出现错误。基本是10个同开 肯定要错。难道说 线程里DLl不安全??  期待高手  Knight94(愚翁)  那个DLL 不是自己写的 不知道函数如何输出
      

  9.   

    那你调用的时候加上一个互斥,如:
    using System.Threading;private static Mutex mEncrypt = null;
    public static int32 myEncryption( StringBuilder mydata, StringBuilder rTxt )
    {
         if( mEncrypt == null ) mEncrypt = new Mutex();
         mEncrypt.WaitOne();//Wait mutex to do encryption     //Call dll to encrypt your context
         Encryption( mydata, rTxt );
        
         mEncrypt.ReleaseMutex();//Release mutex
    }