Ключевой вопрос - то, что глиф в строке берет 32 бита (16 битов для кода символа), но байт только имеет 8 битов для экономии. Непосредственное отображение не существует, если Вы не ограничиваете себя строками, которые только содержат символы ASCII. Система. Текст. Кодирование имеет много способов отобразить строку на байт [], необходимо выбрать тот, который избегает потери информации, и это просто в использовании клиентом, когда она должна отобразить байт [] назад к строке.
Utf8 является популярным кодированием, это компактно и не с потерями.
Похоже, обратные вызовы могут происходить в другом потоке, нежели ваше приложение. [ РЕДАКТИРОВАТЬ: Как я вижу, Джим уже предложил. ] Если это так, да, kaboom , как только вы «коснетесь» чего-либо, связанного с OLE, или вызовите среду выполнения. Та же история, что и с обратными вызовами мультимедийного таймера, fwiw, и я подозреваю, что вам придется принять те же меры предосторожности, что и с ними, если это так.
Короткая история с разными обратными вызовами потоков заключается в том, что вы нужно отправить сообщение самому себе, используя PostMessage, объявленный в библиотеке типов, чтобы объект Err не был установлен VB, а затем позвольте обратному вызову вернуться. Вы выполняете свою собственную обработку по получении отправленного сообщения. Вот библиотека типов, которую я использовал для этого с библиотекой таймеров CCRP:
Кто кому перезвонит? Покажите нам небольшой код.
IDE может маскировать реальные проблемы, поэтому простая возможность запуска не дает гарантии, что то, что вы делаете, поддерживается.
Одна из распространенных проблем с обратными вызовами заключается в том, что среда выполнения VB6 не является потоком -safe, поэтому, если другой поток вызывает ваш код VB, вы не можете делать ничего, что вызовет среду выполнения - например, строки доступа или объекты.
Есть способы обойти некоторые из этих проблем, но я думаю, что мы сначала нужно узнать больше.
Выполняется ли код из того же места, что и среда IDE ? Скорее всего, это эталонная проблема, и вам необходимо перерегистрировать DLL.
Пакет развертывания должен убедиться, что у вас все установлено.
Несколько вопросов: