Показаны сообщения с ярлыком SharpDevelop. Показать все сообщения
Показаны сообщения с ярлыком SharpDevelop. Показать все сообщения

6 июля 2011 г.

Adobe Flash Player ActiveX + IronPython с использованием SharpDevelop

Для многих программистов это тривиальная задача но думаю для начинающих этот топик будет полезен.
Наша задача запустить приложение написанное на IronPython использующее Adobe Flash Player ActiveX c применением среды SharpDevelop.

Понадобится: SharpDevelop и любая версия .Net Framework SDK.

Нам нужно создать компонент для палитры компонентов SharpDevelop. Для этого его надо сгенерировать его с помощью утилиты aximp.exe входящей в состав Net Framework SDK. Команда для генерации довольно таки проста

aximp.exe [имя файла ActiveX]

при этом будет сгенерированно [имякласса]s.dll Ax[имякласса]s.dll. aximp.exe обычно расположена в папке C:\Program files\Microsoft.NET\SDK\*версия*\Bin\ а файл ActiveX %windir%\system32\Macromed\Flash\.

Теперь запускаем SharpDevelop и начинаем новый проект "File">"New">"Solution…", в открывшемся окне выбираем "Python">"Windows Application" указываем имя проекта и нажимаем "Create".

Переходим в режим дизайнера форм нажав кнопку "Design". Переходим к панели "Tools" и вызываем контекстное меню панели, выбираем пункт "Configure Sidebar".

В открывшемся окне добавим новую категорию для нового компонента, нажав кнопку "New", и назовем его "ActiveX". После выберем нашу новую категорию и жмем кнопку "Add Components".

В новом окне переходим во вкладку "Custom" и указываем имя на файл сгенерированный утилитой aximp.exe а именно на тот где имя файла начинается с Ax. Жмем "ok" и еше раз "ok".

Теперь бросаем в окно программы компонент "AxShockwaveFlashObjects" из палитры компонентов и устанавливаем свойство "Movie" объекта равным имени файла нашей флешки. Жмем кнопку "Run". Тут у нас может поджидать ошибка

IronPython.Runtime.UnboundNameException: global name 
'AxShockwaveFlashObjects' is not defined
   at Caller.Call
   at BuiltinFunctionCaller.Call5
   at System.Dynamic.UpdateDelegates.UpdateAndExecute7
   at IronPython.Runtime.Importer.Import
   at IronPython.Runtime.Operations.PythonOps.InitializeModule
   at PythonMain.Main

для его устранения нужно добавить в исходный код программы строку.

import AxShockwaveFlashObjects

снова жмем кнопку "Run" и видим результат

С таким же успехом можно добавить и использовать в среде SharpDevelop любой компонент ActiveX.