File handles
От: BigMak  
Дата: 22.06.01 10:20
Оценка:
Народ, помогите.

Есть проблема:
Я работаю с файлами с помощью low level I\O.
У меня написана маленькая программка, состоящая из exe-шника и dll-лины.
Линковка — dynamic implicit.

Когда я в exe-шнике открываю файл и получаю handle, то тут же я его читаю без проблем. Проблемы появляются, когда я передаю этот handle моей же dll-лине. Видимо там уже ничего неизвестно о ранее открытом файле. В случае чтения, _read возвращает -1, errno = EBADF. Есть предположение, что массив handle-ов (_osfile[]), используемых стандартной библиотекой для хранения информации о файлах, не шарится между моим exe-шником и dll-линой. Есть ли какие-нибудь пути решения этой проблемы?

Пример кода:

//-- mtdll.h --
#ifndef _MTDLL_H_
#define _MTDLL_H_

__declspec(dllexport) int read_n(int n_tmp, char* buf, int n);

#endif //_MTDLL_H_

//-- mtdll.cpp --
#include <stdio.h>
#include <io.h>
#include "mtdll.h"
int read_n(int m_nTmp, char* buf, int n)
{
long tmp = 0;
if( (tmp = ::_read(m_nTmp, buf, n)) < 0)
perror("MyList::read failed");
return tmp;
}

// -- mtdll_test.cpp --
#include <io.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include "mtdll.h"


void main()
{
int fd = _open("mtdll.h", O_RDONLY);
if(fd < 0)
{
perror("\nError during mtdll.h open");
exit(1);
}
char ch;
if(_read(fd, &ch, 1) < 0)
perror("\nError during mtdll.h read");
read_n(fd, &ch, 1);
_close(fd);
}

Заранее благодарю,
BigMak
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.