什么叫“dll当函数用”?没这种概念啊?!
多线程对函数是有要求的,不是随便一个函数都可以用于多线程的。例如如果你一个函数访问了一个全局变量而没有做并发保护,这样的函数就不能用于多线程

解决方案 »

  1.   

    多线程调DLL时每个线程都会调用DllMain,其它与EXE基本没差别。
      

  2.   

    调用dll出现的错误信息,帮我看看
    EXCEPTION(2nd Chance) Exception:  Unknown exception (0xE06D7363)
    code: E06D7363  addr:77E69B01
    KERNEL32.dll-00009B01 (77E60000)
    EAX:03780FD0 EBX:027643C0 ECX:00000000
    EDX:E06D7363 ESI:03781060 EDI:03780FF0
    ESP:03780FC8 EBP:03781020 EIP:77E69B01
    EFLAGS:00000206
    CS:001B DS:0023 ES:0023
    SS:0023 FS:0038 GS:0000
    Stack dump
    03781060:100360A8:E06D7363:00000001
    Call stack
    KERNEL32.dll!00009B01
    BCCORE.DLL!00067FA0
    exdll.dll!00001C19
    !0000B996
    !0000325A
    !00003DC3
    KERNEL32.dll!00012CA8
    Exception:  Unknown exception (0xE06D7363)
      

  3.   

    用ollydbg调试,出错时会停在出错代码处
      

  4.   

    寄存器(MMX)里
    lastErr ERROR_SUCCESS (00000000)
      

  5.   

    看这个没有意义的,从现象看,你的dll显然不是多线程安全的,就是不能用。从汇编或者call stack要是能看出才叫神仙
      

  6.   

    调试一下这个DLL,先定位代码行,再想办法解决....
    个人觉得还是线程锁的问题!
      

  7.   

    dll的内存数据是共享的,DLL不支持多线程,使用多线程调用,基本挂掉的。
      

  8.   

    单独调用时没有问题而多线程调用出错的话,个人觉得是因为你DLL里的函数不是线程安全的。也就是说函数内部变量以及DLL中全局变量的值受到多个线程的修改,以致跟你预想的值不一样,所以会出错,而单独调用的时候只有一个线程修改那些值因此不会有问题。