我在调用DLL时为什么会出现这个错
project E:\working\vosiPrompt\speakmanage.exe   faulted with message:'access violation at 0x00fd7ac:read of address 0x0025ed00'. Process Stopped.Use Step or Run to continue.
其实dll已经执行完了,但是会弹出上面的错误,然后程序就死掉了,不知哪位大大可以帮我解决
声明  
 function VS_ttsplay(config_file,text:PChar;canput:integer):integer ;cdecl;//stdcall;
   external 'vox.dll' name 'VS_ttsplay';
VC中dll声明
extern "C" _declspec(dllexport)  int VS_ttsplay(char *config_file,char *text,int canput)
在调用的过程中,我把cdecl 与 stdcall 这两种方式全用过,不知为什么不行阿,请各位高手帮帮忙

解决方案 »

  1.   

    其实dll已经执行完了,但是会弹出上面的错误,就是 出栈时 清理栈发生的问题。。cdecl / stdcall 都试了没?
      

  2.   

    你的调用过程应该是正确的了
    用C写一个测试程序来调用这个DLL函数试一下,问题出在DLL内部也不一定的
      

  3.   

    还有Dll中的声明是__declspec不是_declspec
      

  4.   

    应该是参数传递的问题
    把你在调用VS_ttsplay时传入Dll的参数类型改一下,可以声明为Array
    最好不要用PChar(String),如果再不行那在函数声明的地方加上var
    Try it
      

  5.   

    在整个应用程序的工程文件.dpr的USES中的第一个上加入ShareMem应该可以解决。
    注意:是工程文件.dpr中!!
      

  6.   

    在整个应用程序的工程文件.dpr的USES中的第一个上加入ShareMem应该可以解决。
    注意:是工程文件.dpr中!!
      

  7.   

    我作如下测试:
    C代码:
    extern "C" __declspec(dllexport) int CCCC(char *AA);int CCCC(char *AA)
    {
    *AA = 0;
    return 101;
    }DELPHI代码:
    function CCCC(AA: PChar): Integer; stdcall; external 'AAA.dll' name 'CCCC';var
      I: Integer;
      S1: String;
      S2: Array[0..100] of Char;
    begin
      SetLength(S1, 100);
      I := CCCC(PChar(S1));      // 这样调用测出现与楼主一样的问题,如果是S2就OK
      ShowMessage(IntToStr(I));
    end;不知道楼主的问题解决了没有?
      

  8.   

    如果可以的话把你的程序给我看看
    [email protected]