kniznica C++

Programovacie jazyky, rady, poradňa...
beluský
Darca
Darca
Používateľov profilový obrázok
Príspevky: 317
Registrovaný: 21 sep 2006, 13:46

kniznica C++

Príspevok od používateľa beluský »

mam napisanu funkciu v kniznici, ktora ma vracat vector poloziek mnou nadefinovaneho typu....

mam taketo nieco:

Kód: Vybrať všetko

typedef struct nieco {
  int index;
} NIECO;
v tomto vektore su polozky typu NIECO (vytvaram ho vo funkcii)

Kód: Vybrať všetko

vector<NIECO> vektor;
a teraz chcem z tejto funkcie vratit ten vytvoreny vektor

Kód: Vybrať všetko

__declspec (dllexport) vector<NIECO> funkcia () {
v hlavicke kniznice mam tiez

Kód: Vybrať všetko

__declspec (dllexport) vector<NIECO> funkcia ();
lenze pise chybu, kedze to robim prvy krat urcite to robim zle a nikde som nenasiel ako vratit "vektor s vlastnym typom poloziek".... poradi mi niekto?

chyby:

Kód: Vybrať všetko

7 C:\DevCpp\xxx\dll\kniznica.cpp In file included from kniznica.cpp 
1 C:\DevCpp\xxx\dll\kniznica.h expected constructor, destructor, or type conversion before '<' token 
1 C:\DevCpp\xxx\dll\kniznica.h expected `,' or `;' before '<' token 
 C:\DevCpp\xxx\dll\kniznica.cpp In function `std::vector<NIECO, std::allocator<NIECO> > funkcia()': 
tuti
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 740
Registrovaný: 01 okt 2006, 19:23
Bydlisko: Prievidza

Príspevok od používateľa tuti »

jak na to kukam skus kuknut ci mas #include <vector> pripadne ci ti netreba pouzivat std::vector ak nemas urobeny using

a este mozem sa opytat co znamena:
__declspec (dllexport) vector<NIECO> funkcia ();
beluský
Darca
Darca
Používateľov profilový obrázok
Príspevky: 317
Registrovaný: 21 sep 2006, 13:46

Príspevok od používateľa beluský »

tuti napísal:jak na to kukam skus kuknut ci mas #include <vector> pripadne ci ti netreba pouzivat std::vector ak nemas urobeny using

a este mozem sa opytat co znamena:
__declspec (dllexport) vector<NIECO> funkcia ();
to je funkcia v hlavickovom subore kniznica.h (tento subor potom includujes a mozes volat tuto funkciu) http://dll.xf.cz/dll.html

mam tam #include, ono to ide ked je navratovy typ funckie int... ale ja potrebujem vratit ten vytvoreny vektor... a vtedy hadze tie chyby...

//autoeditácia príspevku ( 17 Jun 2008, 18:16 )
nikto mi neviem pomoct?
juho
Star
Star
Používateľov profilový obrázok
Príspevky: 551
Registrovaný: 11 máj 2007, 21:16

Príspevok od používateľa juho »

aby funkcia vratila viac poloziek? roznych poloziek?
ci aby funkcia vratila struct(zaznam) ?
beluský
Darca
Darca
Používateľov profilový obrázok
Príspevky: 317
Registrovaný: 21 sep 2006, 13:46

Príspevok od používateľa beluský »

juho napísal:aby funkcia vratila viac poloziek? roznych poloziek?
ci aby funkcia vratila struct(zaznam) ?
no aby vratila vektor... cize viac poloziek, a tie jednotlive polozky su zaznammi
juho
Star
Star
Používateľov profilový obrázok
Príspevky: 551
Registrovaný: 11 máj 2007, 21:16

Príspevok od používateľa juho »

a ked to je int tak ako to vyzera staci tam len zmenit struct na

Kód: Vybrať všetko

int NIECO; 
a potom to funguje?

Kód: Vybrať všetko

C:\DevCpp\xxx\dll\kniznica.h expected constructor, destructor, or type conversion before '<' token
to znamena ze nevie najst deklarovanie toho vektore to vector<NIECO> vektor; mozno to mas na inom mieste nez by mal byt.

no mne sa zda zeby ta deklaracia mala byt typom a nie premennou

Kód: Vybrať všetko

struct typ{
hodnoty...
.....
          }premenna;
skusal si to deklarovat ako

Kód: Vybrať všetko

vector<nieco> vektor;
? ako typ nieco s malymi pismenami pretoze s velkymi je to premenna. a ked ani tak to nepojde tak neviem.
beluský
Darca
Darca
Používateľov profilový obrázok
Príspevky: 317
Registrovaný: 21 sep 2006, 13:46

Príspevok od používateľa beluský »

uz to ide...

bolo treba do kniznica.h pridat

Kód: Vybrať všetko

#include "kniznica.cpp"
pretoze deklaraciu

Kód: Vybrať všetko

typedef struct nieco {
} NIECO;

som mal v tom kniznica.cpp
juho
Star
Star
Používateľov profilový obrázok
Príspevky: 551
Registrovaný: 11 máj 2007, 21:16

Príspevok od používateľa juho »

aha a keby si tam dal extern? tak by to slo bez include?
tuti
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 740
Registrovaný: 01 okt 2006, 19:23
Bydlisko: Prievidza

Príspevok od používateľa tuti »

juho napísal:aha a keby si tam dal extern? tak by to slo bez include?
ist by to islo (myslim) ale samotny typ by sa zistoval az pri linkovani a musel by pisat do kazdeho suboru kde by to chcel pouzit extern.

beluský: struktury sa davaju do *.h suboru. hentakym sposobom si vytvoris cyklicku zavyslost a moze to sposobit viacej komplikacii ako by jeden cakal. Nepride ti inkludovat *.cpp subor divne?
beluský
Darca
Darca
Používateľov profilový obrázok
Príspevky: 317
Registrovaný: 21 sep 2006, 13:46

Príspevok od používateľa beluský »

robim to prvykrat a celkovo aj C++.... takze tak :)

skusim to dat do .h, dik za upozornenie
edit // hotovo funguje este raz dik

--------------------------------------------------------------

aký formát musí mať DLLčko písané v dev-c++?
keď ho chcem registrovať vypíše, že nenašiel DllRegisterServer entry point... nevieim či má tá knižnica správnu štruktúru.... každopádne tam mám

Kód: Vybrať všetko

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
					 )
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
	case DLL_THREAD_ATTACH:
	case DLL_THREAD_DETACH:
	case DLL_PROCESS_DETACH:
		break;
	}
	
    return TRUE;
}
//autoeditácia príspevku ( 20 Jun 2008, 11:21 )
ale ked to skusam v inom programe volat pomocou

Kód: Vybrať všetko

hPeinjectDll = LoadLibrary(TEXT("kniznica.dll"));
tak sa k tým funkciam dostanem...

//autoeditácia príspevku ( 20 Jun 2008, 14:45 )
muselo byť

Kód: Vybrať všetko

extern "C" __declspec(dllexport) long DllRegisterServer () {} 
Napísať odpoveď