Avatar billede karas Nybegynder
16. august 2006 - 21:33 Der er 6 kommentarer

Skjul symboler i statisk bibliotek

Jeg laver et statisk bibliotek hvor jeg ønsker at skjule så meget af implementeringen som overhovedet muligt for brugeren af biblioteket (og dem som prøver at "reverse engineer" biblioteket).

Denne opgave består af to dele
1) Giv så lidt information som muligt med i header filerne.
2) Undgå symboler og lignende i .lib filen, der ikke er defineret i header filerne.

Mit spørgsmål går på at få så mange forslag som overhovedet muligt der hjælper med de to problemer.

Indtil videre bruger jeg følgende tre metoder der alle hjælper med opgave 1):
- Header filer jeg ønsker at skjule bliver kun inkluderet fra cpp filer (symbolerne fra header filerne bliver desværre stadig lagt i .lib filen!).
- Bug af unnamed namespaces (de kan dog ikke bruges hvis indholdet af en header fil skal bruges uden for headeren)
- D-pointer "design pattern" (til dem der ikke kender det: man lægger blot alle private member vars fra klasse X i en struct end classe (X_private) der er defineret i cpp filen og så giver man X member var "X_private * m_private") til at skjule private member variabler.


Alle ideer til hvordan jeg kan undgå at få lagt symbolerne i .lib filen og skjuler implementeringen i header filerne tages imod med kys-hånd:) Links til artikler eller lign. er også meget velkommende!

PS. man kan eventuelt bruge IDE'en? Jeg bruger Visual Studio 6.0, 2003 og 2005
Avatar billede arne_v Ekspert
16. august 2006 - 21:51 #1
de header filer som du shipper til brugerne indeholder vel kun det de skal
bruge

du kan skjule symboler ved at erklaere dem static

C++ kode er meget svaert at decompile

jeg ville skjule implementation i header filerne ved kun at expose abstrakte
klasser og factory klasser
Avatar billede karas Nybegynder
17. august 2006 - 17:54 #2
"de header filer...": Ja, men symbolerne for alle de typer der er defineret i andre header filer kommer med i .lib filen. Det er det der er problemet.

"jeg ville...": det vil være temmeligt upraktisk at eksponere klasser udelukkende gennem abstrakte klasser samt factories.
Avatar billede arne_v Ekspert
20. august 2006 - 04:31 #3
C style funktioner kan du som sagt gøre lokale med brug af static keyword

men alt hvad der kan kaldes udefra skal jo eksistere som symbol i lib filen

jeg tror at du vil være bedre stillet ved at levere en header fil, en dll og
en lille lib til dll'en
Avatar billede arne_v Ekspert
20. august 2006 - 04:31 #4
det er muligt du synes at det er upraktisk, men det er standard praksis inden for OOP
Avatar billede karas Nybegynder
20. august 2006 - 16:38 #5
Jeg forstår ikke pointen med dll'en og hvad er dens forhold til lib'en?

Ja, det er klart at alt lib'en eksponere skal have symboler i lib'en, men der kan (og der er i mit tilfælde) jo sagtens være masse a klasser samt funktioner brugt internt i lib'en som jeg ikke ønsker at eksponere symbolerne på.
Avatar billede arne_v Ekspert
20. august 2006 - 16:59 #6
da en lib skal kunne bruges f mange programmer er den nødt til at ekspose alt

i en DLL kan du selv angive hvilke symboler der skal exposes
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester