Есть 2 программы. Одна пишется в среде C++ Builder 6, другая в QT. нужно передать handle объекта Panel1 в файл, чтобы вторая программа взяла его оттуда и вывела на этот объект свои данные. хэндл записывается в файл, но программа QT не находит его. в чем ошибка? подскажите, альтернативные пути решения. нет желания переносить всю первую прогу в другую среду
Я конечно не такой уж и суперпрограммер на платформе win32, но если не ошибаюсь та Panel1 находится в адресной пространстве другой программы,поэтому думаю что чужая программа не будет иметь право записать туда свои данные. Но есть один универсальный способ манипулирования чужыми окнами в Виндовс,это сообщения,так что копай в сторону SendMessage().
HighExcel ваши адреса не валидны в чужом адресном пространстве например у вас по виртуальному адресу 0xBADC0DE который мапится на физический 0xBADC0DA объект определенного типа а в другом процессе по этому же виртуальному адресу 0xBADC0DE но который мапится на совсем другой физический адрес 0xBADC0DC совсем другие данные из другой области совершенно поэтому ваши виртуальные адреса в чужом процессе не валидные они мапятся на совершенно разные физические адреса вот некоторые механизмы через которые можно передавать данные между процессами DDE клиент - сервер сделать или CLIPBOARD через буфер обмена можно обменятся или юзать WM_COPYDATA тоже неплохо при определенных сценариях помогает или PIPE именнованные каналы для обмена сообщениями или FILEMAPPING открыть проекцию в другом процессе и все ну и погуглить на самом деле больше возможностей
Panel1 это объект для вывода различной мультимедиа инфы. У меня там отображается видео FILE *file; file = fopen("handle.dat","wb"); HANDLE h = Panel1->Handle; fwrite(&h, sizeof(h),1,file); fclose(file); greki_hoy, спасибо, погуглю
или так Code: #pragma data_seg("Shared") DWORD Code = 0xBADC0DE; #pragma data_seg() #pragma comment(linker, "/SECTION:Shared,RWS")
Делать вам нечего...файлы...адреса...процессы....делается элементарно : Ищется окно программы которой хэндл панельки скинуть надо, на него отправляется сообщение к примеру WM_USER+0x100, в lparam хэндл панельки, в rparam 0 и всё. (Соответственно нужно добавить на стороне второго приложения в то окно обрабтчик сообщения WM_USER+0x100)
Можно попробовать через именованные каналы, реализовать http://ru.wikipedia.org/wiki/%D0%98%D0%BC%D0%B5%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BA%D0%B0%D0%BD%D0%B0%D0%BB
Каким образом хэндл может быть в адресном пространстве программы? Хэндл - это объект ядра. Учите матчасть. И не забывайте про функции CloseHandle, DuplicateHandle и иже с ними.
ну тогда DuplicateHandle но то что ты скопируеш описатель в таблицу описателей нужного процесса еще не все он ничего не знает о нем надо как то передать значение хендла а тут самое простое теже сообщения виндовс ну или любой другой механизм чтоб он работать с объектом смог у себя зы это бы давно предложили если бы ТС спросил именно про это