Можно ли создать два разных плагина в одной и той же DLL, один для связи, а другой как холст?
Я знаю, что могу сделать это в том же классе, но я хочу, чтобы первый был без окон (мне нужен только один на браузер), а другой оконный (я могу создать до 4 из них в одном браузере).
Я хочу иметь возможность выбирать между ними, что-то вроде этого.
<object id="plugin0" type="application/x-communication" width="0" height="0">
<param name="onload1" value="pluginLoaded" />
<object id="plugin1" type="application/x-canvas" width="320" height="240">
<param name="onload2" value="pluginLoaded" />
Могу ли я создать объект холста динамически из объекта связи, используя FB :: DOM, и получить указатель JSAPIAUTO для прямой передачи двоичных данных между ними?
NpAPI не поддерживает байтовый массив, и я попытался использовать строку base64, но это очень медленно.
Да, вы можете иметь одну DLL с несколькими «плагинами». На самом деле это всего лишь один плагин, но он может обрабатывать несколько типов MIME. Если вы посмотрите на пример FBTestPlugin, то увидите, что он на самом деле обрабатывает три разных mimetypes. Эти плагины могут по желанию использовать один и тот же интерфейс JSAPI, но все они находятся в одном и том же пространстве памяти, поэтому вы можете (осторожно!) Использовать глобальные переменные для обмена информацией.
Предполагая, что ваш объект «canvas» является экземпляром вашего собственного плагина, вы можете использовать какой-то идентификатор и глобальную карту для передачи значения другому экземпляру плагина, чтобы сообщить ему, какой блок памяти использовать и т. Д. Вы не можете передать JSAPI-объект от одного к другому посредством javascript и получения необработанного объекта C ++ (по крайней мере, не во всех случаях), но вы можете передавать идентификаторы, которые позволят вам найти то, что вы ищете.
Вы можете найти заметки о том, как сделать поддержку нескольких mimetype в огненное дыхание в проекте FBTestPlugin. Я также опубликую их здесь, хотя возможно, что некоторые из этих деталей могут измениться позже.
Изменен оригинальный FBTestPlugin следующим образом для поддержки нескольких типов MIME
в одной кодовой базе:
Отредактируйте PluginConfig.cmake, добавьте несколько записей для следующих
записи: FBSTRING_MIMEType, ACTIVEX_PROGID, FBControl_GUID и
FBSTRING_PluginDescription. Убедитесь, что вы предоставляете уникальные значения для
все записи, включая GUID в FBControl_GUID.
Отредактируйте Factory.cpp, измените PluginFactory :: createPlugin () и добавьте код
проверить mimetype и создать соответствующий объект. Также добавьте
«Mimetype» в качестве параметра для
«Повышение :: make_shared (тип_mime)». Новый код можно построить
«стандартный» плагин FBTestPlugin или новый плагин «SimpleMath» из
объекты FBTestPlugin или FBTestMathPlugin C ++.
В FBTestPlugin.h измените конструктор FBTestPlugin, чтобы он
«const std :: string& mimetype «в качестве аргумента. Добавьте» std :: string
m_mimetype; «как частная переменная для FBTestPlugin.
В FBTestPlugin.cpp измените конструктор FBTestPlugin, чтобы он
«const std :: string& mimetype «в качестве аргумента и установить m_mimetype из
параметр mimetype. Измените createJSAPI () для возврата
«boost :: make_shared (m_host)» вместо
«boost :: make_shared (FB :: ptr_cast (shared_from_this ()), m_host)» в зависимости от mimetype. Включите «SimpleMath.h».
Измените текст плагина в коде чертежа в зависимости от типа mime для визуальной обратной связи с пользователем.
Измените SimpleMathAPI.h и SimpleMathAPI.cpp, чтобы добавить свойство self
и метод «GetSelf ()», оба из которых возвращают shared_from_this ().
Скопируйте FBTestPlugin. * В FBTestMathPlugin. * И измените имя объекта.
Упростите FBTestMathPlugin, удалив LeakFinder. изменять
createJSAPI () для возврата только объекта SimpleMathAPI. Изменить
текст плагина в коде чертежа для визуальной обратной связи с пользователем.
Изменен тестовый код в test.html для проверки нескольких типов mimety. Создайте
три плагина, и тестируйте математические функции, используя все три.
Других решений пока нет …