标签: delphi-xe3

IdUDPClient,如何将数据包发送到服务器?

如何正确发送数据包到UDP服务器?我正在尝试,但它没有工作,我没有从服务器收到任何东西.

我需要的是发送一个数据包: int64|int|int

并从服务器接收数据包: int|int|int64

怎么做正确?谢谢.

type
  Tconnecting = record
    a: int64;
    b: integer;
    c: integer;
  end;
  Treply_connect = record
    a: integer;
    b: integer;
    c: int64;
  end;

var 
  udp: TIdUDPClient;
  send_data: TIdBytes;
  received_data: TIdBytes;
  i: integer;
  packet: Tconnecting;
  reply_packet: Treply_connect;

begin
  packet.a := 41727101980;
  packet.b := 0;
  packet.c := RandomRange(1, 9999999);
  SetLength(send_data, sizeof(packet));
  Move(packet, send_data[0], sizeof(packet));
  udp := TIdUDPClient.Create(nil);
  try
    udp.Host := 'server.com';
    udp.Port := 1234;
    udp.SendBuffer(send_data);
    SetLength(received_data, 0);
    i := udp.ReceiveBuffer(received_data, 5000);
    Memo1.Lines.Add('Data reiceived! Len:'+IntToStr(Length(received_data))+',data:|'+BytesToString(received_data, 0)+'|');
  finally
    FreeAndNil(udp);
  end;
Run Code Online (Sandbox Code Playgroud)

delphi indy10 delphi-xe3

1
推荐指数
1
解决办法
6338
查看次数

在delphi中C++类型int8_t [20]?

什么是平等的

int8_t[20]
Run Code Online (Sandbox Code Playgroud)

Delphi中的C++类型?

我知道它是字节,但是什么是[20]?

谢谢

c++ delphi delphi-xe3

1
推荐指数
1
解决办法
209
查看次数

delphi TFileStream"内存不足"

我遇到一些使用TFileStream从文件到动态数组读取数据块的Delphi代码.编写代码的最初目的是比较具有相同大小但可能具有不同日期和时间戳的两个文件的内容,以查看内容是否相同.这是通过将来自该对的每个文件的数据读入单独的动态数组并将一个数组的每个字节与另一个数组的相应字节进行比较来完成的.

代码对TFileStream.Read进行多次调用.大约75次调用后,程序崩溃并显示"Out of Memory"错误消息.

读取数据块的大小似乎并不重要,它似乎是导致错误消息的调用数.

代码是我编写的一个函数,只要程序遇到需要比较的两个文件就会在其他地方调用(由于我不会进入的原因,可能是四十或五十个不同的文件对).无论是以小块读取的单个文件还是以整体读取的多个文件,都会发生"Out of Memory"错误.它似乎是错误决定因素的调用次数.

虽然我意识到可能有更优雅的方式来实现文件的比较,而不是我在下面显示的,我真正想知道的是使用TFileStream和/或SetLength调用导致记忆问题.我已经尝试在每次调用后释放内存(如代码所示)并且似乎没有任何区别.

如果有人能解释出了什么问题,我将不胜感激.

function Compare_file_contents(SPN,TPN : String; SourceFileSize : int64) : boolean;

var

  SF                : TFileStream; //First file of pair for comparison
  TF                : TFileStream; //Second file of pair
  SourceArray       : TBytes; // Buffer array to receive first file data
  TargetArray       : TBytes; //Buffer array to receive second file data
  ArrayLength       : int64; //Length of dynamic array
  Position          : int64; //Position within files to start each block of data read
  TestPosition      : int64; …
Run Code Online (Sandbox Code Playgroud)

memory delphi runtime-error tfilestream delphi-xe3

1
推荐指数
1
解决办法
1940
查看次数

调用ConvertStringSidToSid()时出现"系统错误.代码:87"

我必须在"Everyone"用户组的某个文件夹上设置prmissions,所以我需要这个组的SID.当我打电话时,ConvertStringSidToSid()我得到错误"System Error. Code: 87 - Parameter is incorrect".为什么?我的代码出了什么问题?

...
function ConvertStringSidToSid(StringSid: LPCTSTR; Sid: PSID): BOOL; stdcall;
  external Advapi32 name 'ConvertStringSidToSidW';
...
var
  Sid: PSID;
...
  Sid := Nil;
  ConvertStringSidToSid(LPCTSTR('S-1-1-0'), Sid);
...
Run Code Online (Sandbox Code Playgroud)

TIA Branko

delphi winapi windows-7 delphi-xe3

1
推荐指数
1
解决办法
1959
查看次数

Delphi Firemonkey 2 .color属性

我不知道这只是我遗漏了什么,但我对此问题感到非常沮丧.
当我尝试设置.color属性时,没有可用的值,例如claBlue.

例如:

 Canvas.Stroke.Color := claBue.
Run Code Online (Sandbox Code Playgroud)

我错过了参考吗?我已经包括FMX.Types.

delphi delphi-xe3 firemonkey-fm2

1
推荐指数
1
解决办法
1770
查看次数

如何立即发送邮件而不提示确认对话框

我正在使用Delphi XE3,以下是我的示例应用程序:

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    function Send(const FromAddr, ToAddr, Subject: String; const AttachFiles: array
        of string; const MsgBody: String): boolean;
  end;

var
  Form1: TForm1;

implementation

uses Winapi.Mapi;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Send('', 'lmengyew@gmail.com', 'test', [], '');
end;

function TForm1.Send(const FromAddr, ToAddr, Subject: String; const
    AttachFiles: array of string; const MsgBody: String): boolean;
var Msg: TMapiMessage;
    lpSender, lpRecipient: …
Run Code Online (Sandbox Code Playgroud)

delphi mapi delphi-xe3

1
推荐指数
1
解决办法
3523
查看次数

在不重新启动下载的情况下恢复EIdSocketError连接 - Delphi

美好的一天 ...

我下载的生成Socket'm使用错误的程序except on E: EIdSocketError the begin......他向我表明生成错误......但我想解决这个错误...,因为它与我下载网站断开,和他对于该程序,我无法返回任何下载...除非您关闭该程序并重新打开...

我怎么能得到这个错误,让他尝试重置一个新的网站连接,而我不必重新启动程序...所以我回去下载最新下载的文件....因为有套接字错误必须重新启动程序并返回下载Zero ... 1mb文件很小,但它们大约200下载:

on E: EIdSocketError do begin
                     ShowMessage('Socket 2');

                     // +++++------
                     FreeAndNil(fileDownload);
                     fileDownload := TFileStream.Create(local_exe+'media_'+IntToStr(down_num)+'.mp4', fmCreate);
                     IdHTTP.Get(montarURL, fileDownload);
                     Memo1.Lines.Add(formatdatetime('dd/mm/yyyy',now)+' '+formatdatetime ('hh:mm:ss',now)+' Lista '+IntToStr(numero_tentativa_loop_um)+'. Connection restored.');
                 end;
Run Code Online (Sandbox Code Playgroud)

delphi indy delphi-xe3

1
推荐指数
1
解决办法
1684
查看次数

Delphi XE3:将WideChar数组转换为Unicode字符串HOWTO?

我在这里做了一些关于上面给出的问题的研究并得出以下代码:

VarStr = array of WideChar;

function ArrayToString(const a: VarStr): UnicodeString;
begin
  if Length(a) > 0 then
    begin
      ShowMessage ('Länge des übergebenen Strings: ' + IntToStr(Length(a)));
      SetString(Result, PWideChar(@a[0]), Length(a) div 2)
    end
  else
    Result := '';
end;
Run Code Online (Sandbox Code Playgroud)

ShowMessage在给定数组中显示正确的字符数,但该函数的结果始终为空字符串.

你的想法好吗?

delphi delphi-xe3

1
推荐指数
1
解决办法
1393
查看次数

Delphi XE2和Delphi XE7中的LongMonthNames用法

为什么LongMonthNames[X]单独(没有名称空间前缀)在Delphi XE7中不起作用,而它在Delphi XE2中工作?

program LongMonthNames_Test;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

begin
  try
    // Works in both Delphi XE2 and Delphi XE7:
    Writeln(System.SysUtils.FormatSettings.LongMonthNames[12]);

    // Works only in Delphi XE2, does NOT work in Delphi XE7:
    // ("not work" obviously means does not compile because of errors in the source code)
    Writeln(LongMonthNames[12]);

    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe2 delphi-xe3 delphi-xe7

1
推荐指数
1
解决办法
2997
查看次数

TObjectList以两个单位出现

我正在使用Delphi XE3.当搜索帮助TObjectList时,我发现它出现在两个单元中:

http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.Contnrs.TObjectList

http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.Generics.Collections.TObjectList

在这种情况下,我应该包括使用哪个单元?还有什么是TObjectList和TList之间的区别,我只是在第一个文档中看到TObjectList = class(TList),所以TObjectList与TList相同?

谢谢

delphi delphi-xe3

1
推荐指数
1
解决办法
102
查看次数