Прикладываю код программ отправки и приемки(для просмотра ссылки Вам необходимо авторизоваться) (для просмотра ссылки Вам необходимо авторизоваться)
Вторую программу сделать exe c автозапуском
Максимально простая логика, отправляем число, ждем число
При включении отладчика начинаются ошибки чтения, либо результат неверный либо симофор не удается открыть итп.
Без отладчика все ок.
Для меня это очень важно. Спасибо
1. Redear - 26 Апреля, 2023 - 03:43:30 - перейти к сообщению
2. Kibor - 26 Апреля, 2023 - 04:47:41 - перейти к сообщению
Отладчик работает только с одной копией запущенного Кибор
3. Redear - 26 Апреля, 2023 - 05:23:11 - перейти к сообщению
Kibor пишет:
Отладчик работает только с одной копией запущенного Кибор
так дело в том, что работает всего 1 копия и это основная программа.
вторая программа в виде exe лежит в папке с кибором и никаким образом к первой программе не относится.
взаимодействие по api через общую память
где я не прав?
4. Redear - 26 Апреля, 2023 - 09:56:01 - перейти к сообщению
можно пояснить, спасибо!)
5. Kibor - 26 Апреля, 2023 - 11:24:26 - перейти к сообщению
Поясню, когда найду время проверить. Я не диспетчер.
6. Redear - 26 Апреля, 2023 - 11:58:03 - перейти к сообщению
хорошо, буду ждать. спасибо
7. Kibor - 26 Апреля, 2023 - 12:10:20 - перейти к сообщению
У меня в отладчике это петляет.
(Добавление)
textout ( 6666
Поставьте нормальный номер. 0
Он у вас один.
Программа думает что их еще 6665
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
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
8. Redear - 26 Апреля, 2023 - 12:21:53 - перейти к сообщению
так она у вас ждет программу №2 с именем LF.EXE (для просмотра ссылки Вам необходимо авторизоваться) необходимо собрать ее в киборе в exe с автозапуском
и положите в папку где запускается основной кибор
по поводу таймера это не проблема, его можно вообще отключить. не там точно ошибка
и положите в папку где запускается основной кибор
по поводу таймера это не проблема, его можно вообще отключить. не там точно ошибка
9. Kibor - 26 Апреля, 2023 - 12:23:55 - перейти к сообщению
Redear пишет:
так она у вас ждет программу №2 с именем LF.EXE
Описывайте полностью задачу.
(Добавление)
И?
Ошибка потому что программа не распознала TerminateProcess
Вызов функции есть, а где ее подключение по external?
(Добавление)
external(INT, "TerminateProcess", "TerminateProcess", "Kernel32.dll");
Добавьте.
10. Redear - 26 Апреля, 2023 - 12:32:08 - перейти к сообщению
про имя LF.EXE запамятовал, а так вроде в первом посте все указано.
1) програма1. кибор основной
2) програма2 на киборе. LF.exe
первая прогрмма через shared memory отправляет запрос, вторая принимает обрабатывает и возвращает значение. и так по кругу.
без отладчика все ок, с отладчиком начинаются ошибки, либо результат недохоходит, либо симофор ожидания теряется, либо общая память ломается. вообщем непонятно.
это максимально упращенная модель просто прием отправка.
на моей программе в отладке, там постоянно выбивает неверные ответы
(Добавление)
протестирую с терминайт процессом, отпишусь. спасибо
по поводу терминейта, в основной программе он есть, в этой модели забыл удалить
(Добавление)
протестировал без терминайта тоже самое. ошибки.
смысл программы:
1. запрос результата функции WhatPlace
2. во второй программе, при запросе этой функции результат всегда 1
3. если первая не получает 1, то результат 0. значит ошибка взаимодействия
1) програма1. кибор основной
2) програма2 на киборе. LF.exe
первая прогрмма через shared memory отправляет запрос, вторая принимает обрабатывает и возвращает значение. и так по кругу.
без отладчика все ок, с отладчиком начинаются ошибки, либо результат недохоходит, либо симофор ожидания теряется, либо общая память ломается. вообщем непонятно.
это максимально упращенная модель просто прием отправка.
на моей программе в отладке, там постоянно выбивает неверные ответы
(Добавление)
протестирую с терминайт процессом, отпишусь. спасибо
по поводу терминейта, в основной программе он есть, в этой модели забыл удалить
(Добавление)
протестировал без терминайта тоже самое. ошибки.
смысл программы:
1. запрос результата функции WhatPlace
2. во второй программе, при запросе этой функции результат всегда 1
3. если первая не получает 1, то результат 0. значит ошибка взаимодействия