Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Macromedia Flash и C++ Builder - как связать?

490
11 апреля 2008 года
frid-karatel
357 / / 15.09.2007
Как связать Macromedia Flash с моей программой на C++ Builder?

Как вообще подключить этот компонент к моей программе, а то отличия в версиях Flash9b.ocx и Flash9e.ocx вызывают ошибку...

Что делать?
246
11 апреля 2008 года
GIZMO
1.8K / / 30.07.2004
Цитата: frid-karatel
Как связать Macromedia Flash с моей программой на C++ Builder?

Как вообще подключить этот компонент к моей программе, а то отличия в версиях Flash9b.ocx и Flash9e.ocx вызывают ошибку...

Что делать?


Посмотри здесь

490
12 апреля 2008 года
frid-karatel
357 / / 15.09.2007
вообще, интересует вопрос, как таскать с собой этот ActiveX компонент и подключать именно его вне зависимости от установленного в системе... А то получается, что программа использует тот, что записан в реестре, а не тот, который я хочу.
490
15 апреля 2008 года
frid-karatel
357 / / 15.09.2007
"пинаюсь" уже неделю... то нормально программа загружается, то ошибка... что делать - понять не могу... :( помогите!
11
15 апреля 2008 года
oxotnik333
2.9K / / 03.08.2007
выложил бы чего, ради приличия... а то, как говорят "телепатов нету"
490
15 апреля 2008 года
frid-karatel
357 / / 15.09.2007
так нечего выкладывать...

регистрирую ActiveX компонент:
%WINDIR%\system32\Macromed\Flash\Flash9b.ocx

Далее вставляю его в билдер через импорт ActiveX-компонентов
Далее кидаю на форму TShockwaveFlash
При показе формы назначаю ему Movie.
В итоге, если запустить одну и ту же программу на других машинах, где стоит или другая версия Flash, или ее вообще нет, то вылезают разные ошибки.

Если версия на другой машине более новая, то вылазит "access violation in module Flash9e.ocx"...

Как указать, что надо использовать только мою версию flash, т.е. как грузить этот activex при создании формы и регистрировать, если надо, а не устанавливать отдельно..
246
15 апреля 2008 года
GIZMO
1.8K / / 30.07.2004
Цитата: frid-karatel
так нечего выкладывать...

регистрирую ActiveX компонент:
%WINDIR%\system32\Macromed\Flash\Flash9b.ocx

Далее вставляю его в билдер через импорт ActiveX-компонентов
Далее кидаю на форму TShockwaveFlash
При показе формы назначаю ему Movie.
В итоге, если запустить одну и ту же программу на других машинах, где стоит или другая версия Flash, или ее вообще нет, то вылезают разные ошибки.
Если версия на другой машине более новая, то вылазит "access violation in module Flash9e.ocx"...


На машине где запускается прога:
1. Должен юыть в наличии Flash9b.ocx. Если его нет, то ктож будет работать вместо него:)
То, что ты "...вставляю его в билдер через импорт ActiveX-компонентов Далее кидаю на форму TShockwaveFlash
При показе формы назначаю ему Movie" - совсем не значит, что он у тебя в проге "сидит". В данном случае Билдер является хостом для Flash9e.ocx и это дает тебе только то,что ты можешь порулить им в дезинг-тайме и не более того... Кстати из своей проги, в итоге, ты должен сделать аналогичный хост.

2. Он должен быть зарегестрирован в системе (прописан в реестре). Иначе твоя прога просто его не найдет и - "access violation".

Цитата: frid-karatel

Как указать, что надо использовать только мою версию flash, т.е. как грузить этот activex при создании формы и регистрировать, если надо, а не устанавливать отдельно..


регистрировать можно просто вызвав DllRegisterServer из Flash9e.ocx (осх - это просто длл, но написанная по определенным понятиям и по этим понятиям она должна иметь ф-ю DllRegisterServer). Ну или не париться и поручить это regsvr32.exe.

Далее создавать его через CoCreateInstance и т.п.

490
15 апреля 2008 года
frid-karatel
357 / / 15.09.2007
спасибо, начинаю больше понимать ;)

но вот не понятны некоторые вещи:
- "должен сделать аналогичный хост" - не понимаю.. :)
- "Далее создавать его через CoCreateInstance и т.п." - это тоже не понятно...

Есть еще один прикол... когда я собираю (компилирую) проект в BCB и запускается прога, то все ОК - ошибок нет.
Но когда я запускаю программу из проводника, например, при передаче программе какого-нибудь параметра в ком. строке, то вылазит ошибка "access violation in ...". И так всегда...

Все библиотеки я зарегистрировал, вообще я сделал это через офиц. установщик от макромедии...
246
16 апреля 2008 года
GIZMO
1.8K / / 30.07.2004
Цитата: frid-karatel
спасибо, начинаю больше понимать ;)

но вот не понятны некоторые вещи:
- "должен сделать аналогичный хост" - не понимаю.. :)
- "Далее создавать его через CoCreateInstance и т.п." - это тоже не понятно...


ну это типо "посадить ActiveX" на свою форму (окно) не буду парить как это делается средствами COM API т.к. я сам в этом не АС. Сделай проще:
1. Идешь сюда качаешь архив Shockwave.zip (он для версии 9 если надо др. версии, следуй инструкциям по этой же ссылке)
2. Создаешь проект, подключаешь ShockwaveFlashObjects_TLB.h, ShockwaveFlashObjects_TLB.срр

Код:
#ifndef MainH
#define MainH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include "ShockwaveFlashObjects_TLB.h"
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    void __fastcall FormCreate(TObject *Sender);
private:    // User declarations
    TComInterface<IShockwaveFlash> m_pSWF;
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

// cpp
#include <vcl.h>
#include <atldef.h>
#define _ATL_DLL_IMPL
#include <atliface.h>
#pragma hdrstop

#pragma comment(lib, "atl.lib")

#include "Main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    AtlAxWinInit();
    HWND hWnd = ::CreateWindow("AtlAxWin", "ShockwaveFlash.ShockwaveFlash.9",
         WS_CHILD|WS_VISIBLE, 0, 0, 300, 300, Handle, NULL, ::GetModuleHandle(NULL), NULL);
    IUnknown* pUnk;
    AtlAxGetControl(hWnd, &pUnk);
    m_pSWF = pUnk;
    pUnk->Release();

    m_pSWF->set_Movie(WideString(ExtractFilePath(Application->ExeName) + "antimult004-irreverse.swf"));
    m_pSWF->GotoFrame(0);
    m_pSWF->Stop();
}

но опять же это все может сделать за тебя Билдер (см. в том же архиве)
только Flash должен присутствовать на компе и д.б. зарегистрирован.
490
17 апреля 2008 года
frid-karatel
357 / / 15.09.2007
а если я разместил уже на форме TShockwaveFlash, то его переназначить надо?

Или получается, что все TShockwaveFlash мне придется создавать в RunTime?
246
17 апреля 2008 года
GIZMO
1.8K / / 30.07.2004
Цитата: frid-karatel
а если я разместил уже на форме TShockwaveFlash, то его переназначить надо?

Или получается, что все TShockwaveFlash мне придется создавать в RunTime?


нет не надо, но лучше пользоваться одним методом - либо создавай вручную (так вроде должно пошустрей работать), либо пусть это делает Билдер (по сути он делает тоже самое + создает враппер через TOLEControl для того, чтобы можно было работать с ActiveX в designtime )

490
17 апреля 2008 года
frid-karatel
357 / / 15.09.2007
Цитата: GIZMO
нет не надо, но лучше пользоваться одним методом - либо создавай вручную (так вроде должно пошустрей работать), либо пусть это делает Билдер (по сути он делает тоже самое + создает враппер через TOLEControl для того, чтобы можно было работать с ActiveX в designtime )



какое метод ты посоветуешь - писать код или добавить на форму TShockwaveFlash в дизайн-режиме?

При каком случае не будет ошибки "access violation in Flash9b.ocx..."?

246
17 апреля 2008 года
GIZMO
1.8K / / 30.07.2004
Цитата: frid-karatel
какое метод ты посоветуешь - писать код или добавить на форму TShockwaveFlash в дизайн-режиме?

При каком случае не будет ошибки "access violation in Flash9b.ocx..."?



ну у меня и так и так работает:)

490
17 апреля 2008 года
frid-karatel
357 / / 15.09.2007
Цитата: GIZMO
ну у меня и так и так работает:)



у меня прикол такой возникает - когда собираю проект в BCB, то все ОК - ошибок нет, когда запускаю программу просто из проводника, возникаеют частенько такие ошибки...

490
22 апреля 2008 года
frid-karatel
357 / / 15.09.2007
совсем нервы с этим flash себе вымотал...

делаю через TLIBIMP.EXE "%windir%\system32\macromed\flash\flash9f.ocx"

создается 4-е файла:
ShockwaveFlashObjects_OCX.cpp
ShockwaveFlashObjects_OCX.dcr
ShockwaveFlashObjects_OCX.h
ShockwaveFlashObjects_TLB.h

У меня на форме есть TShockwaveFlash - я его установил через Import ActiveX...

При этом в проект автоматически вставляются строки:
#pragma link "ShockwaveFlashObjects_OCX" - в .cpp
#include "ShockwaveFlashObjects_OCX.h" - в .h

Когда я пытаюсь собрать проект, закинув эти 4 созданных файла в папку с программой - выдаются ошибки:
[Linker Error] Unresolved external '__fastcall Shockwaveflashobjects_tlb::TFlashObjectInterface::BeforeDestruction()' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\MYPROG\UMAINFORM.OBJ
[Linker Error] Unresolved external '__fastcall Shockwaveflashobjects_tlb::TFlashObjectInterface::InitServerData()' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\MYPROG\UMAINFORM.OBJ
[Linker Error] Unresolved external '__fastcall Shockwaveflashobjects_tlb::TFlashObjectInterface::Connect()' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\MYPROG\UMAINFORM.OBJ
[Linker Error] Unresolved external '__fastcall Shockwaveflashobjects_tlb::TFlashObjectInterface::Disconnect()' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\MYPROG\UMAINFORM.OBJ

Но когда я не закидываю эти файлы в папку с проектом, то он собирается нормально, но программа глючит - из той папки, где весь проект и исходники, она запускается, а из какой-нибудь другой, например C:\1\MyProg.exe - нет, пишет Access violation in module Flash9f.ocx.

И еще один прикол:
При Import ActiveX создаются не такие файлы, как через TLIBIMP.EXE. И когда в папку кидаю файлы, созданные Import ActiveX, то проект собирается без проблем. Но опять же ошибка возникает, если я программ куда-нибудь перемещаю.

Заколебался уже... Что я не так делаю?
490
24 апреля 2008 года
frid-karatel
357 / / 15.09.2007
и еще.... тот код не работает :(
пишет:
Unable to open file "ATL.LIB"

Я посмотрел - его действительно нигде нет...

Поискал в интернете, нашел только atl.dll - это то или нет?
246
25 апреля 2008 года
GIZMO
1.8K / / 30.07.2004
Цитата: frid-karatel
и еще.... тот код не работает :(
пишет:
Unable to open file "ATL.LIB"

Я посмотрел - его действительно нигде нет...

Поискал в интернете, нашел только atl.dll - это то или нет?


держи...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог