//调用前加
SetLength(phone_no, 255);
SetLength(sms_message, 255);
//试试看

解决方案 »

  1.   

    要用stdcall吧!参考一下Delphi调的API:
    Function SHGetSpecialFolderPath(hwndOwner:Integer;pPath:Pchar;nFolder:Integer;bCreat:Boolean):integer;stdcall;external 'Shell32.dll' name 'SHGetSpecialFolderPathA';
      

  2.   

    我开始就是使用stdcall的,但不行
      

  3.   

    改成Stdcallvar 
      phone_no,sms_message:array[0..255] of char;
      m_ComNum:integer;  if Data(m_ComNum, phone_no, sms_message) = 1 then试试
      

  4.   

    function Data(
      Com_num: integer; //输入
      lpCalledPhone, //函数返回值
      lpInfo: pchar //函数返回值
      ): cadinal; stdcall external 'smi.dll';
      

  5.   

    你在声音这个Dll中的函数的时候,函数返回值前要加Var的。

    function Data(
      Com_num: integer; //输入
      Var lpCalledPhone, //函数返回值
      lpInfo: pchar //函数返回值
      ): integer; cdecl external 'smi.dll';
      

  6.   

    to:Jerry529
    wo 不太明白你的意思
      

  7.   

    在Delphi中声明你要调用的Dll中的函数时,返回值变量前要加Var关键词的。
    如:
    function Data(
      Com_num: integer; //输入
      Var lpCalledPhone, //函数返回值
      lpInfo: pchar //函数返回值
      ): integer; cdecl external 'smi.dll';
      

  8.   

    就是楼上说的,没有var就只是把数据拷过去的
      

  9.   

    不会啊!
    我以前都是这样调用的,都可以正确地得到返回值的!你能保证你的入参都能得到返回值吗?
    Dll中的函数没问题吧?!
      

  10.   

    你把phone_no,sms_message这两个参数定义成Pchar型的再试试看。
    还有,你说的无法得到返回值,是指这个函数的返回值(0或者1),还是phone_no,sms_message这两个参数的返回值啊?
      

  11.   

    dll是别人写的,在vc中他说可正常调用。
      

  12.   

    我看了你上面的代码,如果是phone_no,sms_message这个参数无法得到正确值的话,应该是phone_no,sms_message类型不正确的缘故吧,虽然你的调用的时候,通过类型转换使Data函数得到了正确的值,不过,你自己的调用函数后,phone_no,sms_message这两个变量并不能正确地得到值啊
      

  13.   

    我已经将phone_no和sms_message定义为:pchar但结果是一样的。
      

  14.   

    Data(m_ComNum, pchar(phone_no), pchar(sms_message)) = 1
    这句语句返回的值是什么?True or False?
      

  15.   

    要不,你把Dll和你的源代码发给我看看,我调调看,
    只要你用到Dll的这个Form即可
    [email protected]
      

  16.   

    返回值是函数的返回值,执行成功为1,此时我可相应的参数phone_no,sms_message
      

  17.   

    不好意思,我说得不够清楚,我想说在你的程序中,表达式:
    Data(m_ComNum, pchar(phone_no), pchar(sms_message)) = 1 
    的值为多少?
    (我明白你说的返回值是什么意思,我问的是你的程序中,调用Data函数后,这个函数的返回值是“1”还是“0”)
      

  18.   

    1、声明的时候为PCHAR;
    2、传出参数需要VAR;
    3、别忘记分配内存;GETMEM();FREEMEM();
    4、STDCALL
      

  19.   

    to: outer2000
    我已经按你的方法作了一遍,但取出的值是入tc?之类的东西。
      

  20.   

    代码如下:
    var
      phone_no: pchar;
      sms_message: pchar; 
    begin
      GETMEM(phone_no,256);
      GETMEM(sms_message,256);
      if siReceiveData(m_ComNum, phone_no,sms_message) = 1 then
      begin //接收到信息
        if (phone_no <> '') and (sms_message <> '') then
        begin
          EnterCriticalSection(CS);
          //rece_sms_pro(phone_no,sms_message );
          LeaveCriticalSection(CS);
        end;
      end;
      FREEMEM(phone_no);
      FREEMEM(sms_message);
    end;
      

  21.   

    请各位帮忙看一下我的那个:“高分请教DLL的问题吧”!
      

  22.   

    请各位帮忙看一下我的那个:“高分请教DLL的问题吧”!
      

  23.   

    在delphi中说明:
    //返回值说明:0,失败;1,成功;
    function Data(
      Com_num: integer; //输入
      lpCalledPhone, //函数返回值
      lpInfo: pchar //函数返回值
      ): integer; stdcall external 'smi.dll'; // agui: 改成stdcall使用:
    var phone_no,sms_message: array[0..255] of char; // agui:最好不用string,否则应该用zwang的办法,而且返回后要进行处理
    m_ComNum:integer;
      if Data(m_ComNum, phone_no, sms_message) = 1 then
      

  24.   

    to :: chinaway
    我靠,来抢生意?
      

  25.   

    to:: agui 如果这样声明变量,下面语句无法通过:
    Data(m_ComNum, phone_no, sms_message) = 1 then