Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, Shart, Вы писали:
S>>Вообщем надо передать изображение из Delphi (простой TBitmap) в C++ Builder 6, чтобы там его обработать. Причём надо делать это почти мгновенно, потому что изображение из Delphi берётся с камеры.
К>Что значит "передать из дельфи в билдер"? К>- у тебя два модуля одной программы (т.е. exe и dll) написаны на разных языках К>- две программы, запущенные одновременно К>- вторая программа запускается по мере необходимости (так сказать, unix way) К>- программы запускаются по очереди
К>И что значит "чтобы там обработать" К>- первая сторона родила изображение (захватила с видеокамеры), вторая приняла с концами К>- первая сторона родила, вторая обработала и вернула
S>>P.S. Я, кстати, пытался делать через буфер обмена, но это очень не удобно и иногда изображение не проходит...
К>За это убивать надо! А если там пользователь что-то держал? Или наоборот, он туда что-то положил невовремя?
К> К>В пределах одной программы — проще всего передавать в том виде, как они хранятся. К>Казалось бы, дельфи и билдер используют общую библиотеку — так, может, можно прямо TBitmap передавать? Если нельзя — то передавай HBITMAP.
К>Между одновременно запущенными программами — большие данные можно через общую память (memory mapped file). К>Наверняка, захват производится в DIB, и ты его уже потом конвертируешь в DDB. Так вот, не конвертируй, а пиши в MMF. К>Синхронизацию (и даже конвеер с небольшой очередью) наладить — дело наживное.
Сейчас есть exe на Delphi и DLL на BCB. В самой программе можно получить только TBitmap. Но передать TBitmap не получится, т.к. передаётся только ссылка...а с ней ничего не могу сделать...
Задача DLL — по исходной картинке выдать просто число. Что дальше будет с картинкой уже не важно.
P.S. И ещё, вроде читал, что одна программа не может работать с объектами другой программы, т. к. у них разные адресные пространства...