int cardMessage[10]可不是10个字节,
好像你在读10个整数吧?
那Inttostr什么意思?

解决方案 »

  1.   

    API bool ReadMessage(int cardMessage[10]);
     
    type 
      Tmyint: array [0..9] of integer;funciton ReadMessage(cardmessage:Tmyint):boolean;stdcall;external 'TestDll.dll'var
     cardID:Tmyint;
    i:integer;
    begin
      if ReadCardMessage(cardID) then
        for i:=0 to 9 do
         showmessage(inttostr(cardID[i]));         
    end;
      

  2.   

    API bool ReadMessage(int cardMessage[10]);
    定义有问题
    ReadMessage(int &cardMessage[10]);
    funciton ReadMessage(var cardmessage:Tmyint):boolean;stdcall;external 'TestDll.dll'
      

  3.   

    to newyj(老鬼) :
     编译通不过
      

  4.   

    API ReadMessage 的參數應該是指針,所以不是指針類型就是錯的!
      

  5.   

    呵呵呵呵,给20分好象太少了.
    这个函数的意义是:当你把 CardID 传入 ReadMessage 后,返回一个 Bool
    值,表示成功或失败,其中并没有可以返回的其他参数.如果你确信CardID将
    被重新填充后返回,那在你调用程序中必须为CardID分配好内存,而不是简单
    地把数组名传递出去,因为你这样传递实际上只传出了CardID数组的第一个
    元素.外部程序并不知道你的第一个后面还有9个空格,如果成功调用,也是违
    反了内存管理——你无法越界读取.具体例子就免了,自己再看看.
      

  6.   

    type card=array [0..9] of integer;
    var cardid:card;
    begin
    if ReadCardMessage(@cardID) then
      showmessage('');
    end
      

  7.   

    to vcshcn(黑色的星星) :
     你的方法与我的方法是一样的
    var
     cardID:array [0..9] of integer;
    begin
     if ReadCardMessage(@cardID) then 
       showmessage('');
    end;编译时会出错:(好像是分配内存的问题)
    Incompatible types:'Integer' and 'Pointer'
      

  8.   

    --->调用程序中必须为CardID分配好内存
    关键是怎么样给CardID分配好内存API bool ReadMessage(int cardMessage[10]);
        cardMessage[10]:为10个字节信息.
      

  9.   

    var
     cardID:array [0..9] of integer;
    begin
     if ReadCardMessage(cardID) then 
       showmessage('');
    end;
      

  10.   

    to GreensPan(GreensPan) :
    ReadCardMessage(cardID) 是取CarID的内容,这样是不行的
    引用AleTiff()的话是很有道理的:这个函数的意义是:当你把 CardID 传入 ReadMessage 后,返回一个 Bool
    值,表示成功或失败,其中并没有可以返回的其他参数.如果你确信CardID将
    被重新填充后返回,那在你调用程序中必须为CardID分配好内存,而不是简单
    地把数组名传递出去,因为你这样传递实际上只传出了CardID数组的第一个
    元素.外部程序并不知道你的第一个后面还有9个空格,如果成功调用,也是违
    反了内存管理——你无法越界读取
      

  11.   

    type
      TMyIntArray = Array[0..9]of Integer;function ReadMessage(CardMessage:TMyIntArray):bool;stdcall;external 'TestDll.dll';var
     cardID:TMyIntArray;
    begin
     if ReadCardMessage(cardID) then 
       showmessage('');
    end;
    这样好像不通用如果dll是你自己写的,
    不如改写成:
    API bool ReadMessage(int *cardMessage;int Len);//好像你那样声明[10]是没有用的!Delphi中这样声明:function ReadMessage(cardMessage:PInteger;Len:Integer):Boolean;var
      CardId:Array[1..10]of Integer;
    begin
      FillChar(CardId,0,Length(CardId));//这句要不要看你的VC中是怎么实现的了
      if ReadMessage(@CardId,Length(CardId)) then
      begin
      end;
    end;