Re[3]: Помогите подключить dll в VC6
От: Alex Fedotov США  
Дата: 23.09.02 06:49
Оценка: 2 (1)
Здравствуйте Vold, Вы писали:

V>Спасибо за подсказку! Так действительно правильно и функции хоть стали возвращать значения (возвращает 0, т.е. отсутствие ошибки), но основную задачу не выполняет :(


Вот этот код работает на моей системе: в szHash заносится нечто, похожее на хэш файла.

int 
_tmain(
    int argc, 
    _TCHAR * argv[]
    )
{
    HINSTANCE hInstance = LoadLibrary(_T("put_hash.dll"));
    if (hInstance == NULL)
        return -1;

    INT (CALLBACK * pInitPUT_HASH)();
    VOID (CALLBACK * pDonePUT_HASH)();
    INT (CALLBACK * pMakeHashFile)(PCSTR, PCSTR, PINT, PINT);

    *(FARPROC *)&pInitPUT_HASH = GetProcAddress(hInstance, "InitPUT_HASH");
    *(FARPROC *)&pDonePUT_HASH = GetProcAddress(hInstance, "DonePUT_HASH");
    *(FARPROC *)&pMakeHashFile = GetProcAddress(hInstance, "MakeHashFile");

    if (pInitPUT_HASH == NULL ||
        pDonePUT_HASH == NULL ||
        pMakeHashFile == NULL)
        return -1

    INT nRet, nOsErr, nHashErr;
    CHAR szHash[MAX_PATH];
    
    nRet = pInitPUT_HASH();
    if (nRet != 0)
        return nRet;

    nRet = pMakeHashFile("D:\\dxdiag.txt", szHash, &nOsErr, &nHashErr);

    pDonePUT_HASH();

    return nRet;
}


V>Все таки меня смущает разница ссылок на функции библиотеки (адрес который мне указывает дебагер и адрес который указан при быстром просмотре).


Не верь быстрому просмотру, верь depends.exe. Адрес InitPUT_HASH — 0x00003329 относительно адреса загрузки DLL.

V>При вызове основной функции MakeHashFile она опять таки возвращает ноль, но внизу в окне сообщений дебага выдает сообщение "First-chance exception in hash.exe: (KERNEL32.DLL): 0xC0000005: Access Violation"


Это может быть признаком ошибки, а может и не быть.
-- Alex Fedotov
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.