想实现一个软件关于图像抓拍,我们已经有了库函数(*.dll),但是这个软件要实现对于
没有安装图像驱动的电脑也能使用但对于没装图形驱动的电脑如果一开始就调用
   Function BeginCG300(x:longint):longint;stdcall;external'CG300d32.dll';
   ....
   在程序中调用这个函数就会出错(并没用执行到)并且程序不可继续执行.
   我采用
    var 
    myBegincg300:function(x:longint):longint; 
    Pic_handle:Thandle;
    ....
     Pic_handle:=Loadlibrary('CG300d32.dll');
      myBegincg300:=GetProcAddress(Pic_handle,'begincg300');
     调用
       mybegincg300(1);
   出错!
        class EaccessViolation!!

解决方案 »

  1. 这个DLL里面有BeginCG300这个引出函数没?
    还有就是你调试一下.看Pic_Handle有不有有效的值.
      

  2. 出现Eaccessviolation错误是因为你的程序访问了无效的内存区域!建议你再完善你的程序。
    你不妨换种异常处理方式比如,这样:
    try
    try
    ......
    ......
    finally
    end;
    ....
    except
    exit;
    end;
    在Try…Except 结构中嵌套try.....finally 结构,先释放资源,再进行异常处理,这样试试。
      

  3. myBegincg300:function(x:longint):longint; stdcall;
      

  4. 第三个没有用.
    我调试了Pic_handle 是个有效得值.
      

  5. 如果在安装好了驱动程序的机器上能够正确运行,而在没有安装驱动的机器上出错,说明时dll文件中的的函数BeginCG300出的错,跟你的程序无关。你可以在调用BeginCG300之前先判断一下系统是否已经安装驱动,如果没有,就不调用BeginCG300,直接返回。
      

  6. 问题在于在没有安装驱动程序的机子上
    我也要能够运行包含BeginCG300这个函数程序
    只是我可以做到在运行过程中包含BeginCG300这个函数程序的行没有真的执行到。
    但是编译时没有错,可开始运行时,因为有了包含BeginCG300的函数行。所以
    报错。 说没有安装驱动/。
      

类似问题 »