Переписываю C приложение в dll библиотеку
От: Kadet89  
Дата: 08.06.13 13:18
Оценка: -1 :)
Имеется исходник консольной программы для проведения вычислений. Программа написана на Си и компилируется mingw. После компиляции я получаю рабочий экзешник. Мне эту программу нужно переделать в dll, так, чтобы в дальнейшем я мог подключать эту dll к программе-графическому интерфейсу.

Для начала я добавил под функцию мэйн в программе (будующий dll) такой код:
__declspec(dllexport) int __cdecl Message()  {
    MessageBox(NULL, TEXT("1"), TEXT("1"), MB_OK);
    return 1;
}

Собрав программу я получил экзешник (не dll) и проверив его в dumpbin я получил такой результат:

ordinal hint RVA name

1 0 00011AA0 Message

Для проверки я набросал простое приложение на с++


typedef int (_cdecl*pproc)();
pproc out;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    HINSTANCE hLib = LoadLibrary(L"messager.dll");
    if(hLib == NULL) return 0;

    out = (pproc)GetProcAddress(hLib,"Message");
    printf("out %i", (out == NULL)); //0

    if (out == NULL) {
        printf("Error getting Address");
    }
    else {
        int j = out(); // Error Access violation
    }
    FreeLibrary(hLib);
    return 0;
}

"Библиотека" загружается и функция Message тоже. Но при попытке вызвать функцию я получаю ошибку:
0xC0000005: Нарушение прав доступа при чтении "0x0045a780"
0xC0000005: Access violation reading location "0x0045a780

Собственно я почти уверен что мало просто добавить __declspec(dllexport) в исходник чтоб получить рабочую dll. Я пробовал искать мануалы и доки, но всё что находилось — было под С++. Я зашел в тупик и решил поднять тему тут, буду благодарен за любую помощь.
библиотека dll access violation
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.