Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
Декабря 05, 2021, 04:53:01 am
Начало Помощь Поиск Войти Регистрация
Новости:

Просмотр сообщений

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - dimkin

Pages: [1]
1
Подскажите кто разбирается в Delphi. Вот программа, успешно подключается к серверу Финам. Но почему-то в функцию колбэк приходят кракозябры.
В логах видно, что данные приходят успешно. Значит что-то не верно с функцией CallBack.

type
  Tcallback=function(pData:PAnsiChar):boolean;

type
  TForm1 = class(TForm)
    SpeedButton1: TSpeedButton;
    Memo1: TMemo;
    SpeedButton2: TSpeedButton;
    DisconnectButton3: TSpeedButton;
    SpeedButton4: TSpeedButton;
    memo2: TMemo;
    TestButton3: TSpeedButton;
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure DisconnectButton3Click(Sender: TObject);
    procedure SpeedButton4Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure TestButton3Click(Sender: TObject);
  private
    { Private declarations }

  public
    { Public declarations }

  end;

var
  Form1: TForm1;


implementation

    function Initialize(logPath:PAnsiChar;loglevel:integer):PAnsiChar; stdcall;    external 'txmlconnector.dll';
    function UnInitialize:PAnsiChar;                      stdcall;    external 'txmlconnector.dll';
    function SendCommand(pData: PAnsiChar): PAnsiChar;    stdcall;    external 'txmlconnector.dll';
    function SetCallback(pCallback: Tcallback): boolean;  stdcall;    external 'txmlconnector.dll';
    function FreeMemory(pData: PAnsiChar): boolean;       stdcall;    external 'txmlconnector.dll';


{$R *.dfm}

{ TForm1 }

// Описываем функцию для отправки команды и получения результата:
function sendCmd(command: string): string;
var
    cmd, ans: PAnsiChar;
begin
    cmd := PAnsiChar(AnsiToUtf8(command));
    ans := SendCommand(cmd);
    Result := Utf8ToAnsi(ans);
    FreeMemory(ans);
end;

// Описываем колбэк функцию:
function funcCallBack(pData: PAnsiChar): boolean;
var
    str: string;
begin
    str := Utf8ToAnsi(pData);
    FreeMemory(pData);
    //Делаем что угодно с str
    form1.memo2.Lines.Add(str);
    if form1.memo2.Lines.Count>100 then form1.memo2.Clear;

end;


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  DisconnectButton3Click(Sender);
  UnInitialize;
  sleep(1000);
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
var
    cmd, ans: string;
    pData,pRes: PAnsiChar;
    Res:string;
begin
// Перед отправкой команд устанавливаем колбэк функцию:
    pData:= PAnsiChar('D:\delphi\2021\CnnectorTest\log\');
    pRes:= Initialize(pData,2);
    Res:=Utf8ToAnsi(pRes);
    SetCallback(@funcCallBack);

// Отправляем команды
   cmd := Sconnect;
   ans := sendCmd(cmd);
   memo1.Clear;
   memo1.Lines.Add(ans);
end;

Pages: [1]


Войти

Powered by MySQL Powered by PHP Powered by SMF 2.0.10 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS!