VC的OCX中 函数定义如下
long SendTo(long FAR* data, long length, long FAR* szDestVIP);
导入delphi后 看到的该函数 为
SendTo(var szBuffer: Integer; nLength: Integer; var szDestVIP: Integer; 
          nFlags: Integer): Integer;
我在delphi中调用如下:
var
  sTemp :array[0..255] of Byte;
  ipstr : string;
   pData : Integer;
  pDz : Integer;
begin
  ipstr := '10.1.22.2';
  for i := 0 to 255 do
     sTemp[i] := i;  pData :=Integer(@sTemp[0]);
  pDz := Integer(@ipstr[1]);
  SendTo(pData,255,pDz,0);现在遇到的是 SendTo调用成功了 但是发出的数据是sTemp数组的首地址而不是sTemp数组的数据。请问该怎么修改??请知道的朋友指点一下!~~
在VC中调用是成功了的 调用如下:
BYTE outBuffer[0x1000];
....这里省去对outBuffer数组的赋值,,,,
m_strVIP = _T("10.1.1.101");
BYTE szVip[0x40];
memcpy(szVip, LPCTSTR(m_strVIP), m_strVIP.GetLength());
SendTo((long *)outBuffer, 0x0E + nLength, (long *)szVip);

解决方案 »

  1.   

    pData :=Integer(@sTemp[0]); 
    该是
    pData :=sTemp[0]; 
      

  2.   

    delphi中静态数组,数组名称即是数组指针直接用pData:=Cardinal(sTemp);看看
      

  3.   

    var
      pData: Pointer;
      stemp: String;
    begin
      stemp := 'asdf';
      pData := @sTemp;pData即为stemp的地址
      

  4.   

    var
      pData: Pointer;
      pData1: Pointer;
      stemp: String;
    begin
      stemp := 'asdf';
      pData := @sTemp;  pData1 := addr(sTemp);  //这个代码也可