TClientDataSet and DLL trouble
От: Valentin._.  
Дата: 15.05.04 11:28
Оценка:
Всем привет!
Пытаюсь реализовать следующую задумку...
Есть dll, в которой есть компонент TClientDataSet. Требуется при загрузке dll пропарсить и загрузить в TClientDataSet текстовый файл с диска. dll динамически вызывается потоком приложения, в котором этих потоков может быть много. Само приложение является сервисом.

void __fastcall TDM::LoadDataBase(char * FileName, const char Delimiter)
{
char NUMART[10]; char BARCODE[15]; char NAME[80];
char PRICE[8]; char s[128]; AnsiString z;
fstream str(FileName,ios_base::in);
str.seekp(0);
while(!str.eof())
{
str.getline(s,256,'\n');
if (strlen(s)>0)
{
ParseString(s,Delimiter,NUMART,BARCODE,NAME,PRICE);

ClientDataSet1->Append(); //после этого вырубается поток

ClientDataSet1->FieldByName("NUMART")->AsString=NUMART;
ClientDataSet1->FieldByName("BARCODE")->AsString=BARCODE;
ClientDataSet1->FieldByName("NAME")->AsString=NAME;
ClientDataSet1->FieldByName("PRICE")->AsString=PRICE;
ClientDataSet1->Post();
}
};

str.close();
}


После вызова Append, тихо без всяких сообщений вырубается поток и больше ничего... Причем этот же код нормально работает в простом приложении (не из dll).

Подскажите в чем дело? Как это обойти?
Re: TClientDataSet and DLL trouble
От: Аноним  
Дата: 17.05.04 07:17
Оценка:
Ага вот нашел причину.. не инициализирувался TDataModule...

1 int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
2 {
3 if (reason ==DLL_PROCESS_ATTACH)
4 {
5 DM = new TDM(NULL);
6 }
7 return 1;
8 }

В
Но теперь все валится на 5 строчке
Пробовал в оба проекта подключать memmgr.lib — не помогает

Пробовал вообще динамически создавать TClientDataSet,
не используя TDataModule — валится на строчке DS=new TClientDataSet(NULL);
Пробовал использовать kdbMemTable — такая же картина...
Хотя такие например объекты как TIniFile и TTimer нормально создаются динамически и работают.

Пробовал вызывать эту же DLL из обыкновенного приложения а не из потока сервиса — РАБОТАЕТ!
Но как сделать, чтобы это заработало из сервиса?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.