Форум программистов, компьютерный форум CyberForum.ru

Экспорт функции DLL - C++

Восстановить пароль Регистрация
 
Фабелойс
0 / 0 / 0
Регистрация: 08.08.2016
Сообщений: 14
13.11.2016, 23:58     Экспорт функции DLL #1
Вечер добрый.
Работаю над проектом, в котором из DLL экспортируются функции для другого проекта. Столкнулся с проблемой, что сначала была VC 2010, и все работало. Потом поставил VС 2015 Community и не работает экспорт, как я понимаю.

Вот код DLL:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DLLALIVE_API char * GetName(void)
{
    char * temp = "Alive";
    char * pName = new char[10];
    int i = 0;
    for ( ; i < 5; ++i)
    {
        pName[i] = temp[i];
    }
    pName[i] = '\0';
    return pName;
}
DLLALIVE_API BaseFactory * GetFactory(void)
{
    AliveFactory * Factory = new AliveFactory;
    return Factory;
}
А это подгруз в основном проекте:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
typedef BaseFactory* (*GetFactory)(void);
    typedef char* (*GetName)(void);
 
    GetFactory pFnGetFactory;
    GetName pFnGetName;
 
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind;
    HMODULE hMod;
 
    hFind = FindFirstFile(_T("*.dll"), &FindFileData);
    if (hFind == INVALID_HANDLE_VALUE)
    {
        cout << "DLL not found" << endl;
    }
    else
    {
        do
        {
            bool check=true;
            hMod = LoadLibrary(FindFileData.cFileName);
            if (hMod == NULL)
            {
                cout << "Cannot load library " << FindFileData.cFileName << endl;
            }
 
            pFnGetFactory = (GetFactory)GetProcAddress(hMod, "GetFactory");
            if (pFnGetFactory == NULL)
            {
                cout << "Cannot load function GetFactory" << endl;
                check = false;
            }
 
            pFnGetName = (GetName)GetProcAddress(hMod, "GetName");
            if (pFnGetName == NULL)
            {
                cout << "Cannot load function GetName" << endl;
                cout << (char*)pFnGetName();
                check = false;
            }
            if (check)
            {
                AddCategory(pFnGetFactory(), pFnGetName());
            }
        } 
        while (FindNextFile(hFind, &FindFileData) != 0);
    }
    FindClose(hFind);
При дебаге выдает, что как раз pFnGetFactory и pFnGetName равны нулю. Подскажите, в чем проблема. Может ли это быть еще из-за того,ч то изначально код писал на Вин32, а сейчас на Вин64?

Спасибо
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2016, 23:58     Экспорт функции DLL
Посмотрите здесь:

Visual C++ Экспорт CString из dll
C++ Экспорт функции из dll
Экспорт классов из DLL C++
Экспорт класса из dll C++ WinAPI
Экспорт функций DLL C++ COM
C++ Экспорт класса DLL
C++ Экспорт шаблонной функции из DLL
Экспорт функции из dll на с++ C++ WinAPI

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
14.11.2016, 16:05     Экспорт функции DLL #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Фабелойс, а extern "C"-то у функций есть?
Фабелойс
0 / 0 / 0
Регистрация: 08.08.2016
Сообщений: 14
14.11.2016, 19:24  [ТС]     Экспорт функции DLL #3
DrOffset, нет, спасибо огромное, как-то не приметил этого...

Так неловко из-за таких ошибок тупых...
Yandex
Объявления
14.11.2016, 19:24     Экспорт функции DLL
Ответ Создать тему
Опции темы

Текущее время: 03:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru