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

C++

Войти
Регистрация
Восстановить пароль
 
Фабелойс
0 / 0 / 0
Регистрация: 08.08.2016
Сообщений: 14
#1

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

13.11.2016, 23:58. Просмотров 267. Ответов 2
Метки нет (Все метки)

Вечер добрый.
Работаю над проектом, в котором из 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?

Спасибо
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2016, 23:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Экспорт функции DLL (C++):

Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями? - C++
Движок перевожу на платформу Win64 и нужно, чтобы разрядность ЕХЕ и DLL совпадали, а в интернете искал 64-битные версии ogg.dll, vorbis.dll...

Вызов функции из dll - C++
Доброго времени суток! Пытаюсь вызвать функцию, которая находится в библиотеке следующим способом: HINSTANCE dllhandle =...

Список параметров функции из DLL - C++
В runtime загружаю DLL'ки, вывожу список функций содержащийся в них, но так и не нашёл вариантов как экспортировать типы аргументов и...

При компиляции DLL-проекта не создается DLL-ка - C++
Добрый день. создал в Visual Studio 2010 проект C+= типа DLL. В файл dllmain.cpp вставил вот такой код: // test.cpp: определяет...

Windows I/o без Kernel32.dll и Advapi32.dll - C++
Добрый день. Необходимо в Windows XP SP3 распечатать в стандартный поток &quot;some text here&quot; без прямого или косвенного использования...

Вызов функции DLL VB.NET в DLL C++ - C++ Builder
Как вызывать функции dll VB.NET через dll С++, которая приинжекчена к процессу проводника?

2
DrOffset
7351 / 4451 / 1009
Регистрация: 30.01.2014
Сообщений: 7,292
14.11.2016, 16:05 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Фабелойс, а extern "C"-то у функций есть?
0
Фабелойс
0 / 0 / 0
Регистрация: 08.08.2016
Сообщений: 14
14.11.2016, 19:24  [ТС] #3
DrOffset, нет, спасибо огромное, как-то не приметил этого...

Так неловко из-за таких ошибок тупых...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2016, 19:24
Привет! Вот еще темы с ответами:

Получение функции из dll - C++ Builder
Помогите пожалуйста... Я пытаюсь загрузить динамическим способов функцию из dll файла, однако, у Меня проблема с самим получением функции. ...

Использование функции из dll - C++ Builder
Есть сторонняя библиотека XXX.dll из которой мне нужна одна функция. Вот ее прототип: bool XXX_Func(char*); Как мне в своем...

Экспорт функции из dll на с++ - C++ WinAPI
Здравствуйте, помогите пожалуйста. Не могу экспортировать функцию LibreryNIFound() из dll. dll компилируется без ошибок. Экспортирую ...

Экспорт функции из dll - C++
Здравствуйте! Сейчас изучаю экспорты функций из dll-ок. Функцию без параметров удалось успешно экспортировать. А далее пробовал...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru