C++:
#define DEV_CLASS_VOICE "Voice"extern long __cdecl sr_getboardcnt(char *brdname, int *brdcnt);  //一个库文件里引出的函数C++调用如下
int  numvoxbrds = 0;sr_getboardcnt(DEV_CLASS_VOICE,&numvoxbrds); 函数返回成功,不等于-1.
Pascal:
const
  DEV_CLASS_VOICE = 'Voice';  function sr_getboardcnt(brdname: PChar; brdcnt: PINT): LongInt; cdecl;pascal调用如下
var
  numvoxbrds: integer;
begin
  numvoxbrds := 0;
  sr_getboardcnt(DEV_CLASS_VOICE, @numvoxbrds); 函数返回不成功,等于-1;
end;请问各位高手,这是为什么,难道是参数Char * 转成PChar格式不对.帮忙指点一下.

解决方案 »

  1.   

      function sr_getboardcnt(brdname: PChar; brdcnt: PINT): LongInt; cdecl; 没有定义
      

  2.   

    function sr_getboardcnt(brdname: PChar; brdcnt: PINT): LongInt; cdecl; external 'xxx.dll';
      

  3.   

    function sr_getboardcnt(brdname: PChar; brdcnt: PINT): LongInt; cdecl; implementationfunction sr_getboardcnt(brdname: PChar; brdcnt: PINT): LongInt; cdecl; external '库文件名.dll';
      

  4.   

    function sr_getboardcnt(brdname: PChar; brdcnt: PINT): LongInt; cdecl; 
    修改成
    function sr_getboardcnt(brdname: PChar; var brdcnt: integer): LongInt; cdecl; 
      

  5.   

    To:天行者
    function sr_getboardcnt(brdname: PChar; brdcnt: PINT): LongInt; cdecl;  
    修改成 
    function sr_getboardcnt(brdname: PChar; var brdcnt: integer): LongInt; cdecl; 
        这样也没有作用,其实和上面的写法是同样的.帮忙看看有没有其它办法.其他人对我的问题可能有误会,我给的只是函数声明,意思是帮我看看参数有没有转错,引用动态库在实现部分已经做了.不过还是谢谢大家.
      

  6.   

    或者这样:
    const
      DEV_CLASS_VOICE =  'Voice'#0; 
      

  7.   

    TO:天行者
       是对设备操作,但是写了同样的C++代码调用成功啊!Delphi却不行.郁闷啊......To:DelphiGuy
      Object Pascal对AnsiString类型本身就是#0结尾的,所以没有需要写的
      

  8.   

    那你直接这样调用:
    sr_getboardcnt('Voice', @numvoxbrds);
    试试。
      

  9.   

    To:DelphiGuy 
       试过了,直接写或者把'Voice'赋值给一个变量再传进去都试过的,照样不行.但是在VC 6.0里写就可以,直接写"Voice"也可以.这是为什么,郁闷!
      

  10.   

     sr_getboardcnt(PChar(DEV_CLASS_VOICE), @numvoxbrds)
      

  11.   

    To:无天
        sr_getboardcnt(PChar(DEV_CLASS_VOICE), @numvoxbrds);
      
       最开始也是这么写的,试过了,没用!谢谢大家,如果语法没有错,看来我要再找找其他的原因了!
      

  12.   

     问题找到了,是硬件提供商在dll中做了手脚.结帖散分.再次谢谢大家!