PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » PureBasic для Windows » Как передать данные другой программе?


Как передать данные другой программе?

Сообщений 1 страница 8 из 8

1

В справке PB с командой RunProgram() я не подружился.
С обычным запуском другой программы с обычными  параметрами все понятно, тут вопросов нет.
Меня интересуют ключ #PB_Program_Write

По форумам искал. К уважаемому AZJO на http://azjio.narod.ru/ заходил. У чат GPT спрашивал(он мне убедительную чушь написал), по итогу, ничего не нашел.
Вот я пишу

Код:
command.s = ""
dir.s = GetCurrentDirectory()
Compiler = RunProgram("xlam8.exe",command, dir, #PB_Program_Open | #PB_Program_Write) 
Output$ = "ХАХА!"
If Compiler
  WriteProgramString(Compiler, Output$, #PB_UTF8)
EndIf

Как отловить это 'ХАХА' в другой программе на PB?
(вариант делать это через файл рабочий, но хочется более элегантно это делать)

0

2

Код:
command.s = ""
dir.s = GetCurrentDirectory()
Compiler = RunProgram("xlam8.exe",command, dir, #PB_Program_Open | #PB_Program_Write) 
Output$ = "ХАХА!"
If Compiler
  WriteProgramString(Compiler, Output$, #PB_Unicode)
EndIf

xlam8.exe

Код:
OpenConsole()
MessageRequester("", Input())

0

3

А точно нужно консольный метод? Точно нужен не ProgramParameter()?
Гуглить на официальном форуме ReadProgramString, примеров там десятки.
Посмотрел в справке там пример есть только в RunProgram. Надо это исправить (пока PureBasic обновляют).

Отредактировано AZJIO (17.08.2023 22:22:15)

0

4

Спасибо, работает.

Пётр написал(а):

If Compiler
  WriteProgramString(Compiler, Output$, #PB_Unicode)
EndIf

Но почему не работает с ключоми #PB_UTF8/#PB_Ascii ? Я с ними игрался. наверное, во всех комбинациях, а вот  на #PB_Unicode даже не посмотрел.

AZJIO написал(а):

...ReadProgramString...

интерсная тема. Мне обязательно надо ее посмотреть внимательно. У PB известная боль, это отсутствие достаточного справочного материала. Прошаренный народ клубится местечково.  А вот так, да чтоб с нуля, нужно иметь очень большую мотивацию на фоне других языков, где инфы море.

Отредактировано Goga (18.08.2023 07:00:42)

0

5

Goga написал(а):

Но почему не работает с ключоми #PB_UTF8/#PB_Ascii

Потому что программа ждет юникод, а не другие кодировки.

0

6

Пётр написал(а):

Потому что программа ждет юникод, а не другие кодировки.

Странно тогда. Зачем тогда вводить ключи #PB_UTF8/#PB_Ascii в открытие консоли и в   WriteProgramString() ? Наверное, чтобы людей сбивать с толку  o.O

0

7

Затем, что взаимодействовать приходится с программами написанными не нами и не на PureBasic.
Лично сталкивался со всеми вариантами.
Скажу больше, UTF16-UTF16 использовал как раз только с PB, в других случаях #PB_UTF8/#PB_Ascii
p.s. И я не пойму в чём проблема. ReadProgramString(Program [, Flags]) имеет такой же флаг.
Т.е. они просто должны быть одинаковыми у того кто пишет и у того кто читает.
p.p.s. и не забывать про наличие WriteProgramData-ReadConsoleData и WriteConsoleData-ReadProgramData для полной свободы.

Отредактировано useful (20.08.2023 07:25:14)

0

8

Goga написал(а):

#PB_UTF8/#PB_Ascii

строки в PureBasic = #PB_Unicode, то что находится в переменных - #PB_Unicode. Чтобы писать и читать #PB_UTF8/#PB_Ascii используйте WriteProgramData и ReadProgramData и

Код:
*Buffer = UTF8(String$)
*Buffer = Ascii(String$)

вы должны всегда знать в каком формате находятся у вас данные для передачи и под это подстраивать функции. Если у вас строка String$ в Unicode зачем вам плодить сущности через UTF8() вы только тратите гигафлопсы, подстраивайте, т.е. используйте те функции чтобы не перекодировать данные. Если данные предоставлены железно в UTF8, например прочитав из файла в указатель, то и отправляйте этот указатель как есть WriteProgramData(), в противном случае у вас больше возможностей, что WriteProgramData , что WriteProgramString.

Отредактировано AZJIO (20.08.2023 21:54:35)

0


Вы здесь » PureBasic - форум » PureBasic для Windows » Как передать данные другой программе?