1

Есть ли ограничение на размер данных, которые можно скопировать в буфер обмена? Я использую VB6 и мне нужно скопировать блоки данных в буфер обмена.

3 ответа3

1

Чтобы добавить что-то в буфер обмена, вам нужно сначала выделить память для данных, а затем передать дескриптор этого блока памяти в буфер обмена. Поскольку приложения WIN32 ограничены 2 ГБ памяти, объем памяти, который вы можете выделить, будет зависеть от размера ОЗУ, который все еще доступен в вашем приложении. С дополнительным параметром /3GB в boot.ini вы можете сделать это немного больше. И если ваша система имеет менее 2 ГБ ОЗУ, увеличение размера файла подкачки также поможет отправить до 2 ГБ. Конечно, клиентское приложение также должно иметь возможность использовать эти данные. Попытка запустить 1500 МБ данных в процессе, который имеет только 600 МБ, не будет работать.

Но если вы действительно хотите отправить огромные блоки данных, используйте временные файлы! Один трюк будет с использованием интерфейса COM. Сначала создайте свой собственный класс COM, который необходимо обернуть вокруг данных, где данные должны быть основаны на файлах. Затем создайте временный файл и добавьте свои данные в этот файл. Создайте COM-объект, который ссылается на этот временный файл, и отправьте COM-объект клиенту. Клиент также должен иметь возможность обрабатывать COM-объект, но затем он может использовать его для извлечения данных из него снова. Это теоретически обеспечит вам неограниченное пространство памяти. Недостаток: вам нужно написать COM-класс и знать, что вы делаете.

Или используйте другие методы для отправки данных. Именованные каналы, почтовые ящики, TCP/IP ... Существует много альтернативных методов межпроцессного взаимодействия для передачи данных между двумя приложениями.

Поскольку вы используете VB6, я не буду начинать с опций .NET или WIN64.

0

Зависит от количества памяти в системе.

0

Большая часть данных копируется в качестве ссылки, а не сами данные, поэтому вы можете скопировать практически все что угодно. Хотя текст на самом деле копируется, и, насколько я знаю, объем данных ограничен тем, сколько оперативной памяти доступно в настоящее время. Помните это, если vb6 может справиться с этим, я уверен, что буфер обмена может справиться с этим.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .