在主程序中有代码如下:
hLib: THandle;
type
  TGetDllValue = function(VocCh: integer; var CallInfo: TCallerInfo; var Channelstatus: TChannelStatus; adoquery: tadoquery): tcallerinfo; stdcall;adr: TGetDllValue;
vocch: integer;
hLib := loadlibrary('etell.dll');
@adr := GetProcAddress(hLib, pchar('OnWelcome'));
adr(VocCh, CallerInfo[VocCh], Channelstatus[VocCh], adoquery);在dll中的OnWelcome函数为:
procedure OnWelcome(const VocCh: integer; var CallInfo: TCallerInfo; var Channelstatus: TChannelStatus; adoquery: tadoquery); //播放欢迎词
var ls_path: string;
begin
  getdir(0, ls_path);
  if filesearch('WelcomeMenu.voc', ls_path + '\VoiceSourceFiles\') <> '' then
    playfile(VocCh, filesearch('WelcomeMenu.voc', ls_path + '\VoiceSourceFiles\'));

解决方案 »

  1.   

    ……
    声明要一致~~function OnWelcome(VocCh: integer; var CallInfo: TCallerInfo; var Channelstatus: TChannelStatus; adoquery: tadoquery): tcallerinfo; stdcall; //播放欢迎词
      

  2.   

    改了,还是错误,单步执行时发现vocch在调用函数后被优化掉了,应该出现的是的1,结果出现一大堆数字
      

  3.   

    在主程序中有代码如下:
    hLib: THandle;
    type
      TGetDllValue = procedure(VocCh: integer; var CallInfo: TCallerInfo; var Channelstatus: TChannelStatus; adoquery: tadoquery; stdcall;adr: TGetDllValue;
    vocch: integer;
    hLib := loadlibrary('etell.dll');
    @adr := GetProcAddress(hLib, pchar('OnWelcome'));
    adr(VocCh, CallerInfo[VocCh], Channelstatus[VocCh], adoquery);在dll中的OnWelcome函数为:
    procedure OnWelcome(VocCh: integer; var CallInfo: TCallerInfo; var Channelstatus: TChannelStatus; adoquery: tadoquery); //播放欢迎词
    var ls_path: string;
    begin
      getdir(0, ls_path);
      if filesearch('WelcomeMenu.voc', ls_path + '\VoiceSourceFiles\') <> '' then
        playfile(VocCh, filesearch('WelcomeMenu.voc', ls_path + '\VoiceSourceFiles\'));
      

  4.   

    在dll中的OnWelcome函数申明中没有在后面加stdcall,即:
    procedure OnWelcome(VocCh: integer; var CallInfo: TCallerInfo; var Channelstatus: TChannelStatus; adoquery: tadoquery);stdcall; //播放欢迎词