Skocz do zawartości

[c++] generowanie biblioteki dll


karolski

Polecane posty

Witam, Mam do wygenerowania biblioteke ktoral istuje pliki z katlaogu i jego podkatlaogow program juz dziala normalnie ale jak chce to ujac w biblioteke to przy kompilaci wyrzuca ponizej wymienione bledy ktorych nie umiej zidentyfikowac.

 

 #include <windows.h> // dolaczenie bibliteki z funkcjami winapi
#include <stdlib.h>
#include <cstdlib>
#include <iostream>
#include <fstream>


BOOL  WINAPI  DllEntryPoint (HINSTANCE  hinstDLL , DWORD  fdwReason, LPVOID  lpvReserved)
{
 return(TRUE);
}

const int BUFOR = 32768; // wielkosc bufora BUFOR
const int MAX_LIST_PLIK = 32768; // ograniczenie na ilosc listowanych plikow

struct folder {
      char sciezka[MAX_PATH+1]; // przechowamy to sciezke do pliku ktory listujemy - zmienna tekstowa typu char
          char nazwa[MAX_PATH+1]; // przechowamy tu nazwe pliku listowanego - zmienna tekstowa typu char
          LARGE_INTEGER rozmiar[MAX_PATH+1]; // przechowmay tu rozmiar pliku ............
}; // struktura danych do ktorej zapiszemy dane wylistowanych plikow

typedef TCHAR* TCHARptr; // definicja typu char ................

//using namespace std; // przestrzenie nazw


folder * __declspec(dllexport) _stdcall listowanie(const char * sciezkastart)
{

   int liczbaFolderow = 0;
   int znacznikczytania = 0;
   int znacznikzapisania = 0;
   int ilePlikowZnaleziono = 0;
   int i = 0;
   int ilePlikowZnalezionoZnacznik = 0;

   HANDLE hFile;

   TCHAR NazwaPliku[MAX_PATH+1];
   TCHAR glownyfolder[MAX_PATH+1];
   TCHAR folderznazwapliku[MAX_PATH+1];
   TCHAR bierzacyfolder[MAX_PATH+1];

   WIN32_FIND_DATA kontener; // inicjowanie winapi find data, jest to tablica struktur w ktorej sa dane na temat kolejno znajdywanych plikow

   std::ofstream filesFound;

   folder* allFilesFound; // wskaznik na strukture

   char filename[MAX_PATH] = "";
   char sciezka[MAX_PATH] = "";
   char filefound[MAX_PATH] = "";
       char filenamefound[MAX_PATH] = "";
       LARGE_INTEGER filesizefound;
       char *s;

       strncpy(NazwaPliku,"*",MAX_PATH);
   strncpy(glownyfolder,sciezkastart,MAX_PATH);


   // tworzymy tablice dynamiczna aby przechowac w niej drzewko katalogow
   folder* folderArray = new folder[BUFOR];
   strncpy(folderArray[znacznikzapisania].sciezka,glownyfolder,MAX_PATH);
   znacznikzapisania = znacznikzapisania + 1;

   allFilesFound = new folder[MAX_LIST_PLIK];

   // tworzymy liste drzewka katalogow i podkatalogow aby nastepnie wybrac z nich pliki
   while ((znacznikczytania < znacznikzapisania) && (znacznikzapisania < BUFOR)) {
       strncpy(folderznazwapliku,folderArray[znacznikczytania].sciezka,MAX_PATH);
       strncpy(bierzacyfolder,folderArray[znacznikczytania].sciezka,MAX_PATH);
       strncat(folderznazwapliku,"*",1);// add wildcard

       znacznikczytania = znacznikczytania + 1;
       hFile = FindFirstFile (folderznazwapliku, &kontener);
       if (hFile == INVALID_HANDLE_VALUE) {

       } else {
          if (((kontener.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) && ((strcmp(kontener.cFileName,".")))) {

                if ((znacznikzapisania) >= BUFOR) {
                   // zatrzymuje szukanie folderow do wylistowania, poprzez przekroczenie ilosci folderow przewidzianego przez bufor

                }
                else {
                   strncpy(folderArray[znacznikzapisania].sciezka,bierzacyfolder,MAX_PATH);
                   strncat(folderArray[znacznikzapisania].sciezka,kontener.cFileName,MAX_PATH);
                   strncat(folderArray[znacznikzapisania].sciezka,"\\",1);// dolacza na koniec backslasha "\"    
                   znacznikzapisania = znacznikzapisania + 1;
                }

           }

           while ( (FindNextFile(hFile, &kontener))) {

               if (((kontener.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) && ((strcmp(kontener.cFileName,"..")))) {
                   if ((znacznikzapisania) >= BUFOR) {
                      // zatrzymuje szukanie folderow do wylistowania, poprzez przekroczenie ilosci folderow przewidzianego przez bufor

                   }
                   else {
                      strncpy(folderArray[znacznikzapisania].sciezka,bierzacyfolder,MAX_PATH);
                      strncat(folderArray[znacznikzapisania].sciezka,kontener.cFileName,MAX_PATH);
                      strncat(folderArray[znacznikzapisania].sciezka,"\\",1);// dolacza na koniec backslasha "\"    

                      znacznikzapisania = znacznikzapisania + 1;
                   }    

               } // if
            } // while

            FindClose(hFile);
       }
   } // while (znacznikczytania != znacznikzapisania

   liczbaFolderow = znacznikzapisania;

   // teraz listujemy wszystkie pliki z wczesniej znalezionych folderow           
   for (i = 0; i < liczbaFolderow; i=i+1) {


       strncpy(bierzacyfolder,folderArray[i].sciezka,MAX_PATH);

       strncpy(folderznazwapliku,folderArray[i].sciezka,MAX_PATH);

       strncat(folderznazwapliku,"*",1);
       strncat(folderznazwapliku,NazwaPliku,MAX_PATH);
       strncat(folderznazwapliku,"*",1);


       strncpy(kontener.cFileName,"\",1);

       hFile = FindFirstFile (folderznazwapliku, &kontener);

       if (hFile == INVALID_HANDLE_VALUE) {
          // gdy podamy nieprawidlowa sciezke

       } else {

            while (FindNextFile(hFile, &kontener)) {

               if ((kontener.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY))
               {
                  // gdy znajdujemy folder to pomijamy go, byl on zapisany juz wczesniej wiec petla i tak wroci i wyslistuje pliki z tego foldera
               }
               else {

                  if (ilePlikowZnalezionoZnacznik < MAX_LIST_PLIK) {

                        filesFound << bierzacyfolder << kontener.cFileName  << std::endl;
                        strncpy(allFilesFound[ilePlikowZnalezionoZnacznik].sciezka,bierzacyfolder,MAX_PATH);
                        //strncat(allFilesFound[ilePlikowZnalezionoZnacznik].sciezka,kontener.cFileName,MAX_PATH);

                                                strncpy(allFilesFound[ilePlikowZnalezionoZnacznik].nazwa,kontener.cFileName,MAX_PATH);

                                                filesizefound.LowPart = kontener.nFileSizeLow;
                                            filesizefound.HighPart = kontener.nFileSizeHigh;
                                            //allFilesFound[ilePlikowZnalezionoZnacznik].rozmiar = filesizefound.QuadPart;

                        ilePlikowZnalezionoZnacznik = ilePlikowZnalezionoZnacznik + 1;                   
                        ilePlikowZnaleziono = ilePlikowZnaleziono + 1;

                  }
               }

            }// while

            FindClose(hFile);

       } // else


   } // petla for z argumentem liczbaFolderow > 0
   delete [] folderArray;


   return allFilesFound;
}
$rr%$%Ń%ąŃźąŃą$$)$%Ń%ąŃźąŃą$$)$%Ń%ąŃźąŃą$$)$%Ń%ąŃźąŃą$$)$%Ń%ąŃźąŃą$$(%Zvqrs6ŹŚ-jźk7hŚźjXŚÓFy0J&Ś)ZśśnĄ0(V+.jTM9>v+bsZ)ŁZ>Ś1je
,r'(v^XĘipfĆFW\"FV67V2FĆĆW'B7FF6ĆĆ7FvćR67B6\"66WŚś7F'B'r8z0jxn&^)óĘIZw7yŹb{ZŚ unsigned int __declspec(dllexport) _stdcall 
               PodajRozmiarObszaruNiezajetego(char symbol_dysku)

 

Z gory dzieki za pomoc.

Link do komentarza
Udostępnij na innych stronach

Siema.

Nie wiem o co u Ciebie chodzi.

Ale mi jak próbowałem to kompilować pod dev-cpp na win XP to error mi wywalało przy

 

  if (hFile == INVALID_HANDLE_VALUE){ 


} %Ź&Ś'3ry.Św<ęh)Ł90hz{       zŚĘP:n'ŚŚ     if (hFile == INVALID_HANDLE_VALUE) break; &nuŚn{w8zg(
:&Ź3ĘZ&r$ąŃŃŃ

Link do komentarza
Udostępnij na innych stronach

bledy u ciebie zpaenwe sa przez ustawienia kompilatora, pewnie da sie to zmienic w ustawienaich projektu, ale tak czy tak na gorze byly zbedne biblioteki teraz to jest lepiej pozostal tylko problem przy deklaracji funkcji

w naglowku:

 #include <windows.h>
#include <stdlib.h>%^Źy)YXXĘ^
H[[YJ
Y^
B&&yŻ<Ś         Error  1       error C2143: syntax error : missing '{' before '*'      e:\listowanie_generator\funcja.c        24      
Error   2       error C2059: syntax error : 'type'      e:\listowanie_generator\funcja.c        24      

zastanawiam sie czy tak wogole to moze byc, ide dalej szukac rozwiazania i czekam na dalsza pomoc, z gory dzieki

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...