[DLL] ladowanie z systemu

0

W momencie gdy dodaje do projektu przez Add Reference (Visual Studio 2010) dwie biblioteki z windows/system32 (chodzi konkretnie o: FirewallAPI.dll oraz hnetcfg.dll) w katalogu projektu (oraz w samym projekcie w sekcji References) pojawiaja sie trzy zupelnie inne biblioteki: Interop.NATUPNPLib.dll, Interop.NETCONLib.dll oraz Interop.NetFwTypeLib.dll. Bibliotek tych nie ma w system32 (zakladam ze sie w jakis magiczny sposob utworzyly na podstawie tych dwoch ktore wczytalem na poczatki).

Moj problem polega na tym, ze chcialbym zeby projekt korzystal de facto z bibliotek ktore ma w OSie, zeby nie bylo potrzeby dostarczania tych 3 Interop.*.dll wraz z aplikacja.

Spotkal sie kiedys ktos z czyms takim?? :P

0

Przez Add Reference dodajemy dll-ki .Netowe, nie trzeba tak dodawać bibliotek natywnych.

0

to w takim razie jak zaladowac biblioteki natywne?

0

Nie ładować wcale.
W klasie rejestrujesz metody extern poprzez atrybut DllImport i używasz ich później jak normalnych metod.

http://msdn.microsoft.com/en-us/library/e59b22c5.aspx
http://msdn.microsoft.com/en-us/library/aa288468%28v=vs.71%29.aspx

0

A może mu chodzi o COM?

0

no wlasnie, z tego co sie zorientowalem to sa biblioteki COM, i ich sie niestety nie laduje z DLLImport tylko chyba przez reflections czy cos takiego...

0

COM? To ten syf, co się go do syfiastego GACa wrzuca, a potem korzysta nie pamiętam jak?

0

bardzo mozliwe...ktos bylby w stanie powiedziec jak to dynamicznie zaladowac?

0
somekind napisał(a)

COM? To ten syf, co się go do syfiastego GACa wrzuca, a potem korzysta nie pamiętam jak?

No przeciez referencji do natywnej dll-ki by nie dodał - to pewnie był COM i pewnie mu wygenerowało jakieś proxy do COM? Co prawda nie testowałem w VS 2010 ale nie sądzę żeby było tak dobrze że generuje coś z natywnych dll-lek - tam musiał być interfejs com, a próba dodania dll-ki natywnej powinna skończyć się błędem.

No chyba że VS 2010 coś zmienił tutaj, ale jakoś w to wątpię.

A jeżeli to interfejs COM, to o ile się nie mylę trzeba właśnie dodać jako referencję i powinien automatycznie wygenerować proxy, przez które da się "dobrać" do metod coma (to te pliki Interop.). Ale po co trzymać to w gac? NIe sądzę że jest to konieczne

0

:) ciesze sie ze sie rozumiemy, jednakze nadal nie otrzymalem odpowiedzi na pytanie, w jaki sposob moge korzystac z tych metod bez rozpowszechniania mojej aplikacji z tymi Interop'ami (jesli mozne je jakos wkompilowac to nie ma problemu, mi po prostu zalezy na tym zeby cala aplikacja to byl pojedynczy plik)

0

Da się je połączyć w jedno assembly:
http://research.microsoft.com/en-us/people/mbarnett/ILMerge.aspx

0

A może taki głupi sposób: przelecieć te pliki Interop Reflectorem i wyciągnięty z nich kod wkleić do projektu? Teoretycznie mogłoby zadziałać

0

Da się je połączyć w jedno assembly:
Czasem się da, czasem się nie da. Ruletka.

1 użytkowników online, w tym zalogowanych: 0, gości: 1