PDA

Zobrazit plnou verzi : Využití exportované C++ třídy a jejích metod z DLL



riman
16-03-2004, 20:07
Historie se opakuje. Když jsem si kdysi koupil svou první TV kartu (3DeMON), byl jsem nadšený z dálkového ovládání. Brzy jsem zjistil, že by se mi moc líbilo, ovládat s tím, co mě napadne, ne jen televizi. Tak jsem hledal univerzální programy na dálkové ovládání a skončil u Girderu. Jenže ouha, žádný z dostupných pluginů nefungoval. Nezbylo nic jiného, než sehnat hlavičky knihovny na ovldádání z originální aplikace, sebrat své skrovné znalosti C++, přeložit potřebné hlavičky funkcí do Object Pascalu (Delphi) a prostě si ten plugin udělat sám.

Jak píšu - historie se opakuje. Koupil jsem si nedávno Hauppauge WinTV NOVA-t, která má dálkové ovládání... Žádný plugin, který by fungoval, jsem nesehnal. Podstoupil jsem tedy anabázi se získáním SDK od TechnoTrendu, který vyrábí vlastní chipset, a zírám na zdrojáky ukázkové aplikace ve Visual C++ 6.0.

Mám totiž docela problém - v tomto případě příslušná knihovna exportuje rovnou celou třídu. Exporty jejích metod a typů pak vypadají nějak takhle "?OnRemoteControlCode@CDVBRemoteControl@@MAEXPAEH@Z". A já se obávám, že to si v nějakém jiném jazyce a možná i v nějakém jiném C++ nářečí ani neškrtnu.

Pokud má někdo zkušenosti a ví či alespoň tuší, jak by se dal tenhle problém vyřešit, budu mu moc vděčný. Opakuji - mám DLL s exportovanými třídami, mám ukázkovou aplikaci ve Visual C++ 6.0 a umím obstojně Delphi. (Ještě jsem nedosáhl takového stupně zoufalství, abych se začal učit Microsoftí céčko...)

john
17-03-2004, 11:59
zkus www.builder.cz, urcite nekdo poradi..

artam
17-03-2004, 13:48
riman:
Huh, Delphi (Pascal) a C++ to sú hrušky a jablká 9-) . MSVC++ 6.0 je C++ ako každé iné, a nemusíš sa učiť práve to mikrosoftie, môžeš gcc a devcpp, atď, ale v každom prípade sa asi budeš musieť to C++ naučiť, drvivá väčšina vývojárskej komunity, ktorá sa venuje hardvéru, pracuje v c++ a neznáša pascal (tiež som takto postihnutý a preto sa hrdo priznávam, že som neobjektívny) :-I

Mike
17-03-2004, 14:00
Delphi používá v objektech jiné volání, takže přívolání nepůjde, buď to udělej v C++, nebo si udělej v C++ přechodné DLL, které ti převede volání C stdcall na C++

riman
17-03-2004, 14:50
Když jsem se na to včera díval, napadlo mě, že bych to mohl udělat tak, že udělám v tom VC++ jednoduchou DLL, kde při inicializaci vytvořím potřebný objekt a jeho metody vyexportuju jako klasické funkce a pak už to v pohodě načtu v Delphi.

Ale narazil jsem na problém, a to ten, že C++ ve Visual Studiu .NET 2003 vytrvale odmítá konstrukci "class AFX_EXT_CLASS CDVBRemoteControl", což je dost nepříjemné.

Každopádně, je otázka, když bych už dokázal v tom céčku udělat DLL, jestli bych nezmákl celý plugin... ;-)

riman
17-03-2004, 15:18
Nejsem vývojář hardware, programuju pro své potěšení menší věcičky, kde hraje důležitou roli uživatelské rozhraní. A na to je Delphi skutečně vynikající nástroj.

C++ je určitě mocnější jazyk, ale možná bys byl překvapen, že ten rozdíl není zase tak obrovský. Ale nemám žádný důvod tady rozpoutávat nějakou flamewar... ;-) Chci jenom vyřešit problém.

artam
17-03-2004, 19:40
V pohode, flamewar je nezmysel 8-)

FYI, prekvapenie sa nekoná :-) , ono je to asi tak, že aj v tom MSVC++ sú značne silné nástroje na tvorbu GUI. Delfín mi len osobne (ale zrejme asi nielen mne) pripadá dosť ťažkopádny na písanie ovládačov (sys, dll), väčšinou sa tam píšu zdroje v texťáku, žiadne prevratné gui, a pascal je na môj vkus trochu "ukecaný" (aj keď musím povedať, že taký COBOL, čo sme sa učili na strednej, ten bol teda ukecaný asi 100x viac :-E )