C# a dll – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

C# a dll – .NET – Fórum – Programujte.comC# a dll – .NET – Fórum – Programujte.com

 

Grungy0
Super člen
17. 10. 2011   #1
-
0
-

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.

Nahlásit jako SPAM
IP: 158.193.84.–
Prvý náznak hlúposti, je pocit geniality.
liborb
~ Redaktor
+18
Guru
18. 10. 2011   #2
-
0
-

To, co hledáš, se jmenuje COM (COM+), kde je naprosto běžné, že dll vytvořená v C se používá v Delphi, C# apod. A žádná úskalí to nemá, prostě to funguje.

Nahlásit jako SPAM
IP: 78.80.52.–
Grungy0
Super člen
18. 10. 2011   #3
-
0
-

Á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.

Nahlásit jako SPAM
IP: 213.160.170.–
Prvý náznak hlúposti, je pocit geniality.
liborb
~ Redaktor
+18
Guru
18. 10. 2011   #4
-
0
-

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.

Nahlásit jako SPAM
IP: 78.80.52.–
Grungy0
Super člen
18. 10. 2011   #5
-
0
-

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? 

Nahlásit jako SPAM
IP: 213.160.170.–
Prvý náznak hlúposti, je pocit geniality.
liborb
~ Redaktor
+18
Guru
19. 10. 2011   #6
-
0
-

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ě.

Nahlásit jako SPAM
IP: 78.80.52.–
zlz
~ Anonymní uživatel
634 příspěvků
Nahlásit jako SPAM
IP: 213.211.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 50 hostů

Podobná vlákna

Import dll do me dll — založil VladislavK

Dll — založil paking

Dll — založil Tomass

DLL a c++ — založil Míra

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý