Redear |
Отправлено: 26 Апреля, 2023 - 13:23:11
|
Мастер
Покинул форум
Сообщений всего: 202
Дата рег-ции: Июль 2022
Репутация: 0
|
Kibor пишет: Отладчик работает только с одной копией запущенного Кибор
так дело в том, что работает всего 1 копия и это основная программа.
вторая программа в виде exe лежит в папке с кибором и никаким образом к первой программе не относится.
взаимодействие по api через общую память
где я не прав?(Отредактировано автором: 26 Апреля, 2023 - 13:23:38) |
|
|
Kibor |
Отправлено: 26 Апреля, 2023 - 20:10:20
|
Эксперт
Покинул форум
Сообщений всего: 8226
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
У меня в отладчике это петляет.
CODE:MemoryMap ( )
external ( VOID , " RtlMoveMemory " , " RtlMoveMemory " , " Ntdll.dll " )
external ( INT , " CreateFileMapping " , " CreateFileMappingA " , " Kernel32.dll " )
external ( INT , " MapViewOfFile " , " MapViewOfFile " , " Kernel32.dll " )
external ( INT , " CloseHandle " , " CloseHandle " , " Kernel32.dll " )
external ( INT , " UnmapViewOfFile " , " UnmapViewOfFile " , " Kernel32.dll " )
external ( INT , " CreateSemaphore " , " CreateSemaphoreA " , " Kernel32.dll " )
external ( INT , " OpenSemaphore " , " OpenSemaphoreA " , " Kernel32.dll " )
external ( INT , " ReleaseSemaphore " , " ReleaseSemaphore " , " Kernel32.dll " )
external ( INT , " WaitForSingleObject " , " WaitForSingleObject " , " Kernel32.dll " )
SizeBuf = sizearray ( Buf )
FileMapping = CreateFileMapping ( INVALID_HANDLE_VALUE , NULL , PAGE_READWRITE , 0 , SizeBuf'300' , " RedMap " )
if ( FileMapping'1920' == NULL )
FileMap = MapViewOfFile ( FileMapping'1920' , FILE_MAP_READ + FILE_MAP_WRITE , 0 , 0 , 0 )
if ( FileMap'366149632' == NULL )
int Semaphore = OpenSemaphore ( SEMAPHORE_MODIFY_STATE , 0 , " Semaphore " )
if ( Semaphore'0' != NULL )
int Pid = findprocess ( " LF.exe " )
if ( Pid'-1' > - 1 )
createpipeprocess ( pathfolder ( ) + " LF.exe " )
int timer = 30
getdisplay ( Z'-842150451' , X'-842150451' , Y'-842150451' )
looptime ( 30000 )
if ( ReadMemory ( ) == " Start " )
RtlMoveMemory ( address ( # Buf'Н' [ 0 ] ) , FileMap'366149632' , SizeBuf'300' )
return format ( # Buf'null' [ 0 ] )
_pause ( 1000 )
looptime ( t'1000' )
sleep ( 10 ) --- 43
timer'30' --
textout ( 6666 , X'1920' / 2 , Y'1080' - 60 , " LOADING: " + format ( timer'29' ) , 1 )
if ( ReadMemory ( ) == " Start " )
RtlMoveMemory ( address ( # Buf'null' [ 0 ] ) , FileMap'366149632' , SizeBuf'300' )
return format ( # Buf'null' [ 0 ] )
_pause ( 1000 )
looptime ( t'1000' )
sleep ( 10 ) --- 44
timer'29' --
textout ( 6666 , X'1920' / 2 , Y'1080' - 60 , " LOADING: " + format ( timer'28' ) , 1 )
if ( ReadMemory ( ) == " Start " )
RtlMoveMemory ( address ( # Buf'null' [ 0 ] ) , FileMap'366149632' , SizeBuf'300' )
return format ( # Buf'null' [ 0 ] )
_pause ( 1000 )
looptime ( t'1000' )
sleep ( 10 ) --- 44
timer'28' --
textout ( 6666 , X'1920' / 2 , Y'1080' - 60 , " LOADING: " + format ( timer'27' ) , 1 )
if ( ReadMemory ( ) == " Start " )
RtlMoveMemory ( address ( # Buf'null' [ 0 ] ) , FileMap'366149632' , SizeBuf'300' )
return format ( # Buf'null' [ 0 ] )
_pause ( 1000 )
looptime ( t'1000' )
sleep ( 10 ) --- 44
timer'27' --
textout ( 6666 , X'1920' / 2 , Y'1080' - 60 , " LOADING: " + format ( timer'26' ) , 1 )
if ( ReadMemory ( ) == " Start " )
RtlMoveMemory ( address ( # Buf'null' [ 0 ] ) , FileMap'366149632' , SizeBuf'300' )
return format ( # Buf'null' [ 0 ] )
_pause ( 1000 )
looptime ( t'1000' )
sleep ( 10 ) --- 44
(Добавление)
textout ( 6666
Поставьте нормальный номер. 0
Он у вас один.
Программа думает что их еще 6665 |
|
|
Redear |
Отправлено: 26 Апреля, 2023 - 20:32:08
|
Мастер
Покинул форум
Сообщений всего: 202
Дата рег-ции: Июль 2022
Репутация: 0
|
про имя LF.EXE запамятовал, а так вроде в первом посте все указано.
1) програма1. кибор основной
2) програма2 на киборе. LF.exe
первая прогрмма через shared memory отправляет запрос, вторая принимает обрабатывает и возвращает значение. и так по кругу.
без отладчика все ок, с отладчиком начинаются ошибки, либо результат недохоходит, либо симофор ожидания теряется, либо общая память ломается. вообщем непонятно.
это максимально упращенная модель просто прием отправка.
на моей программе в отладке, там постоянно выбивает неверные ответы
(Добавление)
протестирую с терминайт процессом, отпишусь. спасибо
по поводу терминейта, в основной программе он есть, в этой модели забыл удалить
(Добавление)
протестировал без терминайта тоже самое. ошибки.
смысл программы:
1. запрос результата функции WhatPlace
2. во второй программе, при запросе этой функции результат всегда 1
3. если первая не получает 1, то результат 0. значит ошибка взаимодействия(Отредактировано автором: 26 Апреля, 2023 - 20:35:21) |
|
|
|