Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Wrapper knihovny c++ do c#

Aktivity
Avatar
Michal
Člen
Avatar
Michal:30.1.2020 18:46

Ahoj
Mám dotaz. Už přes týden se snažím wrappovat knihovnu C++ pro použití v C#. V add reference mi to samozřejmě nebere. Nefunguje mi ani Dllimport. Prošel jsem mnoho stránek a videí, ale všude si nejprve knihovnu vytvoří a pak ji wrappují. Já mám knihovnu, kterou jsem nevytvářel já a navíc bez .h a .cpp souborů (tedy pokud nepočítám demo). Knihovna je .dll i .lib. Prosím jakým způsobem se dá taková knihovna wrappovat?
Děkuji za odpověď.

 
Odpovědět
30.1.2020 18:46
Avatar
Ondřej Šrytr:31.1.2020 12:49

Ahoj,

jsi si jistý, že jsi ten DllImport používal správně? Jiná cesta asi nespíš není.

 
Nahoru Odpovědět
31.1.2020 12:49
Avatar
Luboš Běhounek Satik:31.1.2020 13:16

Ahoj, addreference bere jen managed knihovny. Lib je knihovna pro statický linkování, to c# neumí, takže potřebuješ jen to dll.
Co přesně ti dllimport dělá? Jaký error to hází?

Nahoru Odpovědět
31.1.2020 13:16
https://www.facebook.com/peasantsandcastles/
Avatar
Michal
Člen
Avatar
Odpovídá na Luboš Běhounek Satik
Michal:31.1.2020 20:28

Ahoj
o tom addrefernce vím, jen jsem to pro jistotu napsal. Dllimport mi žádnou chybu sám o sobě nehází. Jen mi jde o to, že když napíšu příkaz z této knihovny, nemělo by mi to házet chybu, že "nebylo definováno". Tudíž to tuto instrukci nezná a podle mě by ji to znát v tu chvíli (po použití Dllimport) už mělo. Proto si myslím, že Dllimport nefunguje. Nebo jsem nepochopil, jak tato instrukce funguje a používám ho špatně, i když syntakticky správně (třeba to musím nějak "debugovat" nebo něco podobného).

 
Nahoru Odpovědět
31.1.2020 20:28
Avatar
Odpovídá na Michal
Luboš Běhounek Satik:31.1.2020 20:32

Chybu ti to hází za běhu nebo při kompilaci?

Nahoru Odpovědět
31.1.2020 20:32
https://www.facebook.com/peasantsandcastles/
Avatar
Michal
Člen
Avatar
Odpovídá na Luboš Běhounek Satik
Michal:31.1.2020 20:57

No po napsání instrukce z této knihovny mi to hází, že ji nezná. Takže mi to ani nezkompiluje. Dllimport mám syntakticky správně. Tam mi to chybu nehází. Pokud mám jen čistě tuto část programu, tak mi to zkompiluje v pohodě. Problém je po napsání jakékoli instrukce z knihovny.

 
Nahoru Odpovědět
31.1.2020 20:57
Avatar
Odpovídá na Michal
Luboš Běhounek Satik:1.2.2020 11:45

tak na to DllImport klikni pravym, pripadne na tu zarovku u toho a dej resolve dependencies nebo jak to tam je a ono ti to prida do usings co je potreba :)

Editováno 1.2.2020 11:45
Nahoru Odpovědět
1.2.2020 11:45
https://www.facebook.com/peasantsandcastles/
Avatar
Ondřej Šrytr:1.2.2020 15:07

Myslím, že to jen vyžaduje jmenný prostor InteropServices.

using System.Runtime.InteropServices;
 
Nahoru Odpovědět
1.2.2020 15:07
Avatar
Michal
Člen
Avatar
Michal:3.2.2020 16:19

Ahoj
InteropServices jsem samozřejmě použil. Syntakticky to mám v pořádku.
To, co píše Luboš mi bohužel provést nejde. Nemůžu tam nikde resolve dependencies, ani nic podobného najít. Do toho usingu by mi to pak mělo vložit přímo tu knihovnu, kterou potřebuji, nebo to InteropServices?

Díky

 
Nahoru Odpovědět
3.2.2020 16:19
Avatar
JerryM
Člen
Avatar
JerryM:7.5.2021 9:46

Obávám se že taková knihovna se bude Wrappovat dost těžko... pokud nemáš ani seznam prototypů tedy .h (header) files tak toho moc neuděláš .. určitě se tam něco posere .. předpokladem úspěšného wrappingu je bohužel existence kodu v C++ nebo alespoň prototypových header souborů. Téměř vždycky se tam ale do zdrojáku v C++ musí něco doplnit nebo upravit kvuli kompatibilitě s C++/CLI. Nicméně pokud je knihovna jednoduchá tak mužeš rovnou použít C++ DLL soubory v C# pomocí tzv. Marshalování a jinak pro .lib soubory musíš udělat wrapper
https://stackoverflow.com/…harp-program
jestli je tvuj projekt závislý na dll a lib současně a nemáš zdrojáky tak bych doo toho nešel ... to asi nedopadne ...

 
Nahoru Odpovědět
7.5.2021 9:46
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.