Plugin do Expressivi w C++ Builder

dział ogólny

Plugin do Expressivi w C++ Builder

Nowy postprzez Cyfrowy Baron » wtorek, 30 wrzeÅ›nia 2008, 11:13

Próbuję napisać wtyczkę do Expressivi, sam kod nie stanowi problemu, jednak po wrzuceniu pluginu (DLL) do katalogu plugins programu, Expressivo nie rejestruje wtyczki. Stworzyłem wtyczkę testową zgodnie z opisem pliku pomocy Expressivo, ale nawet tak poprawnie napisana wtyczka nie jest rozpoznawana przez program. Sam program jest napisany w C++, wiec nie powinno być problemu. Przejrzałem kod przykładowej wtyczki "Clock", która jest przez Expressivo rozpoznawana i w moim pluginie jest dokładnie tak samo. Przypuszczam wiec, że to kwestia konfiguracji środowiska C++ Builder, byż może ktoś się zetknął z typ problemem.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Plugin do Expressivi w C++ Builder

Nowy postprzez Cyfrowy Baron » piÄ…tek, 3 października 2008, 10:38

Jak widzę brak odzewu, więc może nieco przybliżę problem.

Expressivo dostarcza bibliotekę do tworzenia pluginów na którą składają się dwa pliki:
► Biblioteki expressivo_plugin 

Biblioteki włączam do projektu własnej wtyczki DLL, następnie dodaję kod zgodnie z opisem w pliku pomocy do Expressivo, właściwie na początek umieszczam po prostu dokładnie taki kod jaki znajduje się w opisie pomocy i zgodnie z opisem powinien zadziałać:
► Kod mojej wtyczki 


Wszystko ładnie się kompiluje, powstaje plik DLL, jednak Expressivo nie podłącza wtyczki, a przycyna tkwi w tym, że podczas kompilacji wtyczki otrzymuje komunikat z ostrzeżeniem [Linker Warning] Warning: Attempt to export non-public symbol 'pluginMain' z tym, że jest tych ostrzeżeń pięć, po jednym dla każdej definicji i jeden dla funkcji, czyli:

[Linker Warning] Warning: Attempt to export non-public symbol 'pluginMain'
[Linker Warning] Warning: Attempt to export non-public symbol 'getInfo'
[Linker Warning] Warning: Attempt to export non-public symbol 'registerAction'
[Linker Warning] Warning: Attempt to export non-public symbol 'ttsCommand'
[Linker Warning] Warning: Attempt to export non-public symbol 'pluginCommand'



To oznacza nie mniej, nie więcej, że dokonywana jest próba eksportu symboli (tutaj funkcji i definicji), które nie są publiczne. I w tym tkwi problem.
Pytanie brzmi, jakich zmian dokonać w plikach, żeby funkcje stały się funkcjami publicznymi.

Jeżeli ktoś by mnie spytał jaką wtyczkę chcę napisać - taką która będzie czytała pliki z napisami do filmu z uwzględnieniem czasów, tak by powstał jeden duży plik zawierający ścieżkę dźwiękową zsynchronizowaną z filmem.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Plugin do Expressivi w C++ Builder

Nowy postprzez Cyfrowy Baron » piÄ…tek, 3 października 2008, 11:14

Problem częściowo rozwiązałem modyfikując plik expressivo_plugin.def, teraz ma taką postać:
Kod: Zaznacz cały
EXPORTS
   pluginMain = _pluginMain
   getInfo = _getInfo
   registerAction = _registerAction
   ttsCommand = _ttsCommand
   pluginCommand = _pluginCommand


Pozostał tylko jeden komunikat z ostrzeżeniem: [Linker Warning] Warning: Attempt to export non-public symbol '_getInfo'
No i tutaj nie wiem co zrobić z tą funkcją, dlaczego wciąż nie jest to funkcja publiczna.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Plugin do Expressivi w C++ Builder

Nowy postprzez Cyfrowy Baron » piÄ…tek, 3 października 2008, 11:50

Rozwiązałem już problem, wystarczyło zmienić wpis w pliku głównym pliuginu:

z
Kod: Zaznacz cały
const plugin_info_t *getInfo(void) // <-- tutaj void
{
   return &pluginInfo;
}


na
Kod: Zaznacz cały
const plugin_info_t *getInfo(int x) // <-- tutaj argument typu int
{
   return &pluginInfo;
}
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Plugin do Expressivi w C++ Builder

Nowy postprzez wargo » piÄ…tek, 3 października 2008, 12:54

A co to za program expressivo?
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    NieznanyNieznana

Re: Plugin do Expressivi w C++ Builder

Nowy postprzez Cyfrowy Baron » piÄ…tek, 3 października 2008, 13:26

Expressivo to syntezator mowy, można go zintegrować np. z programem AllPlayer i wtedy syntezator czyta napisy do filmów odtwarzanych w Expressivo.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana


Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 4 gości