Zdravím Vás, budem musieť vytvoriť jeden program, ktorého vývoj zaberie dosť času a keďže som lenivý robiť GUI pohrávam sa z myšlienkou vytvoriť dll knižnicu ktorá bude obsahovať "jadro" aplikácie a tie srandy okolo klikania myši a vykresľovania nechať na C# (konkrétne windows form). Moja otázka znie, aké úskalia takéhoto riešenia vás napadajú? Dllka by bola napísaná v jazyku, ktorý má cčkovský interface, ale nejak si nedokážem predstaviť predávanie premenných iných ako základných typov, alebo smerníkov do C#. Od C# očakávam len nejaké obsluhy udalostí, ako klikanie na buttony a výpis údajov.
Fórum › .NET
C# a dll
![](img/forum_vlakno_help_vyreseno.png)
Áno o COM som počul, problém je že jazyk Ada žiadnu podporu pre COM nemá pokiaľ viem. Preto chcem skúsiť takéto riešenie, len som chcel od niekoho kto s tým má už nejaké skúsenosti vypáčiť nejaké múdrosti na čo si dávať pozor, prípadne ako je to s importom tried a iných záležitostí s pohľadu kompatibility.
Ada? Proč "najednou" Ada? Ale to není moje starost :)
Tvorba COM komponenty je jen o něco složitější než tvorba třídy:
- v jazyku IDL si zadefinuješ rozhraní
- kompilátorem (MIDL) ho dostaneš všechno podstatné pro další pokračování (hlavičkové soubory atd.)
- v klasické knihovně implementuješ 4 metody (DllRegisterServer apod.)
- vytvoříš třídu, která implementuje to tvoje rozhraní (+ rozhraní IUnknown) + je ještě vhodné udělat tvorbu nové instance přes implementaci IClassFactory
- zkompiluješ, zaregistruješ (regsvr32.exe) a používáš
- pokud si vtipně nezměníš rozhraní (místo vytvoření nového), tak nebudeš mít problémy
- mimo klasické typy můžeš předávat variant, takže vlastně úplně všechno, ukazatel na rozhraní IUnknown, ze kterého si pak dostaneš odpovídající rozhraní atd.
Za sebe můžu říct, že to používám několik let a funguje to perfektně. In-Process komponenty jsou rychlostně srovnatelné s přilinkovanými knihovnami (co se C++ týče). Dokonce lze vytvořit o něco málo složitější komponentu, kterou můžeš používat v mnoha skriptovacích jazycích, takže klidně na HTML stránce v IE. Asi jediný drobný problém je omezený výběr typů pro marshaling a omezení dané použitím daného apartmentu, ale je to "jenom" soubor pravidel, které si člověk musí osvojit. V tvém případě tě s největší pravděpodobností nic omezovat nebude.
Asi sme sa nepochopili, ale vďaka za fajn návod :)
COM rozhodne nemôžem použiť pretože tá dllka určite nebude vyvíjaná v cčku, preto to "najednou".
Stále mi ostáva len volať rozhranie z dllky. Ako je to ale s predávaním parametrov? Ako budú správať také ukazovatele, alebo triedy na strane Csharpu? Bude sa do nich starať aj garbage collektor? Základné rozhranie by bolo len pridaj niečo, spočítaj niečo atď, ale čo keď mu budem musieť niečo predať na vypísanie, nejakú kolekciu alebo tak, s tým už asi budú nejaké problémy nie?
Tu dll budeš dělat v Ada a v C# používat. V podstatě stačí, jestli si schopen vytvořit odpovídající binární rozhraní. Zadal jsem to do googlu a:
David Botton created GNATCOM project to help Ada interoperate with Windows COM Object.
takže asi jde používat COM komponenty, ale nehledal jsem, jestli je jde i vytvářet. To přenechám tobě.
![](img/forum_nove_psp_new.png)
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
![](/img/smile/1.gif)
![](/img/smile/2.gif)
![](/img/smile/3.gif)
![](/img/smile/4.gif)
![](/img/smile/5.gif)
![](/img/smile/6.gif)
![](/img/smile/7.gif)
![](/img/smile/8.gif)
![](/img/smile/9.gif)
![](/img/smile/10.gif)
![](/img/smile/11.gif)
![](/img/smile/12.gif)
![](/img/smile/13.gif)
![](/img/smile/14.gif)
![](/img/smile/15.gif)
![](/img/smile/16.gif)
![](/img/smile/17.gif)
![](/img/smile/18.gif)
![](/img/smile/19.gif)
![](/img/smile/20.gif)
![](/img/smile/21.gif)
![](/img/smile/22.gif)
![](/img/smile/23.gif)
![](/img/smile/24.gif)
![](/img/smile/25.gif)
![](/img/smile/26.gif)
![](/img/smile/27.gif)
![](/img/smile/28.gif)
![](/img/smile/29.gif)
![](/img/smile/30.gif)
![](/img/smile/31.gif)
![](/img/smile/32.gif)
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Nenašly se knihovny tbb.dll a tbb_debug.dll — založil Kevil
Import dll do me dll — založil VladislavK
Moderátoři diskuze