我的代码是用VC写的,客户用的是C++ Builder写的。用VC写的Demo调用我们的DLL运行正常。但用C++Builder写的EXE调试我们的DLL,经常会提示“First-chance exception in Project1.exe (TWCUTCHR.DLL): 0xC0000090: Float Invalid Operation.”。感觉好像是浮点出错了,但定位到的代码正常,只要那段代码有浮点变量的运算就出错。晕了,请各位帮忙给出个主意。谢谢!

解决方案 »

  1.   

    VC写的导出纯C的dll,如果要用C++ Builder调入需要BCB的工具Implib转换VC生成的lib库,如果是LoadLirbray,那另当别论。全部重编译试试。
      

  2.   

    定义def文件,然后在每个函数前加上WINAPI定义试试
      

  3.   

    我就经常用CB动态调用VC的dll,没有出现过问题。主要是要注意在VC中采用_declspec(   dllexport   )这种形式,在CB中调用函数时间常进行指针转换。例如:
        HINSTANCE   handle;   
        FARPROC   lpFarProc;
        void   (*lpaddit)(int,int,int *);
        int   ntemp;
        handle   =   LoadLibrary("DlgRegularDll.dll");    
        lpFarProc   =   GetProcAddress(handle,"ShowDlg");
        lpaddit   =   (void( _cdecl   *)(int,   int,   int  *))lpFarProc;   
        lpaddit(2,3,&ntemp);       
        FreeLibrary(handle);
        
      

  4.   

    但是,如果是静态调用,则还必须进行转换生成相关的lib文件才行。不过看上去你这里应该是动态调用吧。
      

  5.   

    不知道你用的是静态调用还是动态调用。静态调用是否有转换成BCB使用的lib格式。
      

  6.   

    用的是动态调用,而且在函数前加了PASCAL EXPORT,怀疑代码有bug,但找不到。怀疑是除0了,可是这种错误比较严重,VC也应该报错的。
      

  7.   


    是不是dll的函数参数中有浮点类型?
      

  8.   

    对,有个参数 double & fRatio;
      

  9.   

    换成字符串传递,在dll里再转换为浮点进行计算,试试。
      

  10.   

    觉得应该是调用方式不一致产生的bug,在函数前加上WINAPI定义,这样可以保证函数调用方式一直,都是以WINAPI方式压栈调用的