Wszystkie moje funkcje, które mam w dll-ce i mają w sobie pomocnicze zmienne automatyczne klasy fstream nie działają. Gdy debuguję to dostaję SIGSEGV. W konsoli wyświetla się błąd 0xC0000005 lub 0xFF i wywala.
gdy f funkcji głównej program dojdzie do tej linii
cout<<counting("pliku.txt");
to wywala "Program przestał działać".
Oto plik text.h (którego nie załączam w projekcie bo nie mam w dll-ce klas, a pozostałe funkcje działają prawidłowo bez niego)
#ifndef __TEXT_H__ #define __TEXT_H__ using namespace std; #include <windows.h> /* To use this exported function of dll, include this header * in your project. */ #ifdef BUILD_DLL #define DLL_EXPORT __declspec(dllexport) #else #define DLL_EXPORT __declspec(dllimport) #endif #ifdef __cplusplus extern "C" { #endif void DLL_EXPORT SomeFunction(const LPCSTR sometext); bool DLL_EXPORT is_white(string linia); //sprawdza czy linia składa sie jedynie z białych znaków lub jest pusta bool DLL_EXPORT is_comp_empty(string linia); //sprawdza czy linia jest pusta bool DLL_EXPORT is_comment(string linia); //sprawdza czy linia jest komentarzem bool DLL_EXPORT is_int_convert(string linia); //sprawdza czy linię można przekonwertować na liczbę całkowitą string DLL_EXPORT without(string linia, char znak); //zwraca linię bez znaku przekazanego jako argument string DLL_EXPORT inttostr(int liczba); //konwertuje liczbę całkowitą na ciąg znaków string DLL_EXPORT substitute(string tekst, string co, string na_co); //wyszukuje w tekście frazę i zastępuje ją określonym ciągiem znaków string DLL_EXPORT read(string nazwa, int nr); //zwraca konkretną linijkę z pliku int DLL_EXPORT counting(string nazwa); //zlicza ilość linii w pliku void DLL_EXPORT rewrite(string p1, string p2); //przepisuje całą zawartość pliku do innego pliku //Funkcje korzystające z biblioteki <vector> void DLL_EXPORT paste(string nazwa, string tekst, int nr); //wstawia w pliku w określoną linię jakiś tekst, przesuwając niższe o 1 w dół void DLL_EXPORT cut(string nazwa, int nr); //usuwa z pliku określoną linię, przesuwając niższe o 1 w górę #ifdef __cplusplus } #endif #endif // __TEXT_H__
A oto nie działające funkcje z text.cpp
string DLL_EXPORT read(string nazwa, int nr) { fstream plik; string linia; int n=1; plik.open(nazwa.c_str(), ios::in); while(getline(plik,linia)) { if(n == nr) return linia; n++; } plik.close(); } int DLL_EXPORT counting(string nazwa) { fstream plik; string linia; int ilosc_linii=0; plik.open(nazwa.c_str(), ios::in); while(getline(plik,linia)) ilosc_linii++; plik.close(); return ilosc_linii; } void DLL_EXPORT rewrite(string p1, string p2) { fstream plik1,plik2; string linia1; plik1.open(p1.c_str(), ios::in); plik2.open(p2.c_str(), ios::out); { while(getline(plik1,linia1)) plik2<<linia1<<endl; } plik1.close(); plik1.clear(); plik2.close(); plik2.clear(); }
Ktoś wie jak to jest z tymi plikami?