Ошибка в DLL
От: poison_rat  
Дата: 10.03.03 17:36
Оценка:
Помогите кто сможет ...

Написал DLL вызываю с параметрами, как функция отработает, вылетает ошибка, если процедуру напишу(в DLLке) без параметров, то всё чинно идёт ...
Код:

//DLLка
extern "C" __declspec(dllexport) void libraryloader(char adr[15],int port) 
{
    int s1;
    FILE *stream1;
    stream1 = fopen("!333.txt", "w");

      ................

    fclose(stream1);
    return ;
}
//Сам вызов

typedef void (WINAPI*cfunc)(char as[15],int sa);

cfunc libraryloader;

int main(int argc, char* argv[])
{
    HMODULE hLib;
    hLib = LoadLibrary("tlibrary.dll");
    if(hLib != NULL)
    {
        printf("Ok !");
    }
    else
    {
        printf("Fucka !");    
    }
    libraryloader=(cfunc)GetProcAddress((HMODULE)hLib, "libraryloader");
    if(libraryloader==NULL) 
    {
       printf("Unable to load function(s)\n");
       FreeLibrary((HMODULE)hLib);
    }
    libraryloader(as,sa);
    getch();
    FreeLibrary((HMODULE)hLib);
    return 0;
}


Заранее спасибо ...

Исправлена подсветка синтаксиса. -- ПК.
Re: Ошибка в DLL
От: ilnar Россия  
Дата: 10.03.03 17:41
Оценка: 4 (1)
Здравствуйте, poison_rat, Вы писали:

PR>Помогите кто сможет ...


PR>extern "C" __declspec(dllexport) void libraryloader(char adr[15],int port)


PR>//Сам вызов


PR>typedef void (WINAPI*cfunc)(char as[15],int sa);


PR>cfunc libraryloader;


у тебя функция в dll описан как cdecl, а вызываешь как stdcall (WINAPI)
убери WINAPI
разница в очистке стека при возврате из функции в разных типах вызовах
Re[2]: Спалибо тебе Ilnar большое ...
От: poison_rat  
Дата: 10.03.03 17:59
Оценка:
Спасибо за помощь ... быстро и оперативно, даже не ожидал
Re[2]: Re[2]: Ошибка в DLL
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 11.03.03 10:25
Оценка: 4 (1)
Здравствуйте, ilnar, Вы писали:

I>убери WINAPI


Не надо полагаться на умолчания компилятора. Они могут быть изменены. Лучше в коде в обоих местах (и в клиенте, и в сервере) указывать соглашение о вызовах.
... << Robert Plant — Ship of fools >>
Алексей Кирдин
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.