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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Serg046
21 / 21 / 2
Регистрация: 07.01.2010
Сообщений: 376
#1

Динамическая загрузка библиотеки - C++

06.06.2012, 01:12. Просмотров 1552. Ответов 24
Метки нет (Все метки)

lab2.dll
C++
1
2
3
4
5
6
7
#include <windows.h>
#include <math.h>
 
extern "C"  __declspec(dllexport) double MyFunc(double X, double Y)
{
    return -log(fabs(X * X / (Y - 1))) / log(2.0);
}
Загружаю ее статически, кинув длл и либ в проект
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "stdafx.h"
#include <iostream>
 
#pragma comment(lib, "lab2.lib") 
extern "C" _declspec(dllexport) double MyFunc( double X, double Y);
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    double X, Y;
    cout << "Введите X: ";
    cin >> X;
    cout << "Введите Y: ";
    cin >> Y;
    cout << "Результат = " << MyFunc(X, Y) << endl;
    system("pause");
    return 0;
}
Все отлично, но (кинув в проект длл) загружая динамически выскакивают какие-то исключения.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <Windows.h>
using namespace std;
 
int main(int argc, CHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    double X, Y;
    cout << "Введите X: ";
    cin >> X;
    cout << "Введите Y: ";
    cin >> Y;
    HINSTANCE hDllInstance = LoadLibraryEx(L"lab2.dll", 0, DONT_RESOLVE_DLL_REFERENCES );
    typedef double(*functionDll)( double, double );
    functionDll myFunc = (functionDll)GetProcAddress(hDllInstance, "MyFunc");
    cout << "Результат = " << myFunc(X, Y) << endl;
    FreeLibrary(hDllInstance);
    system("pause");
    return 0;
}
Что не так то?

Добавлено через 6 часов 44 минуты
Есть у кого готовый проект? Желательно vс++

Добавлено через 13 минут
Кстати все отлично работает если моя dll будет такой
C++
1
2
3
4
5
6
7
#include <windows.h>
#include <math.h>
 
extern "C"  __declspec(dllexport) double MyFunc(double X, double Y)
{
    return 5;
}
Ощущение что не отрабатывают math.h функции, тогда почему при статически поключенной длл все норм
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2012, 01:12     Динамическая загрузка библиотеки
Посмотрите здесь:

создание библиотеки dll и динамическая загрузка - C++
Есть какие-нибудь статьи, чтобы изучить, как создать и загрузить библиотеку? А то на сайте msdn.microsoft дают такой код, который с...

Динамическая загрузка DLL - C++
Доброго времени суток! Создал dll с добавление класса, как учили: http://msdn.microsoft.com/ru-ru/library/ms235636.aspx. Далее,...

Динамическая загрузка и освобождение памяти для двумерного массива - C++
Всем добрый день:victory: У меня возник небольшой вопрос , и надеюсь что отзывчивые форумчане 8-) помогут мне с ним разобраться. ...

Загрузка библиотеки и использованием ее функций - C++
Добрый день уважаемые форумчане. Как всегда не нашел подходящего раздела, поэтому пишу тут. Есть turbo c++ версии 3.0. и есть...

Динамическая сруктура - C++
Как сделать из этой статической динамическую структуру? // Structure static.cpp: определяет точку входа для консольного приложения. // ...

Динамическая память - C++
Здраствуйте!!!! Помогите выделить память под двумерные массив элементами которого являются слова. Было бы хорошо листинг программы....

динамическая память.... - C++
Ввести двухмерном массив, для работы с массивом использовать указатель. Массив разместить в динамической памяти. Определение суммы...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
06.06.2012, 01:12     Динамическая загрузка библиотеки #2
Цитата Сообщение от Serg046 Посмотреть сообщение
Есть у кого готовый проект? Желательно vс++
Помогите с подключением dll к проекту
Тут попродвинутей
GetFileType и GetCosoleCursorInfo
Serg046
21 / 21 / 2
Регистрация: 07.01.2010
Сообщений: 376
06.06.2012, 01:17  [ТС]     Динамическая загрузка библиотеки #3
Да статически у меня все норм, динамически тоже, не используя math.h функции
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
06.06.2012, 01:23     Динамическая загрузка библиотеки #4
Цитата Сообщение от Serg046 Посмотреть сообщение
Все отлично, но (кинув в проект длл) загружая динамически выскакивают какие-то исключения.
что значит "какие-то"? они на то и выскакивают, чтобы их конкретно анализировали. описывай поподробнее.
-=ЮрА=-
Заблокирован
Автор FAQ
06.06.2012, 01:23     Динамическая загрузка библиотеки #5
Цитата Сообщение от Serg046 Посмотреть сообщение
не используя math.h функции
проекты по первой ссылке смотрел?
Она же ведёт на проект с собственными функциями и math.h там вообще не фигурирует
Далее если хотим именно LoadLibrary то заходим сюда http://www.cyberforum.ru/blogs/34326/blog244.html и смотрим об указателе на функцию
Serg046
21 / 21 / 2
Регистрация: 07.01.2010
Сообщений: 376
06.06.2012, 01:25  [ТС]     Динамическая загрузка библиотеки #6
C++
1
2
3
4
5
extern "C"  __declspec(dllexport) double MyFunc(double X, double Y)
{
    double res = -log(fabs(X * X / (Y - 1))) / log(2.0); 
    return 5;
}
Такая длл тоже исключение дает. Щас скину его.

Добавлено через 41 секунду
Необработанное исключение в "0x775815de" в "Dynamic2.exe": 0xC0000005: Access violation.
-=ЮрА=-
Заблокирован
Автор FAQ
06.06.2012, 01:25     Динамическая загрузка библиотеки #7
Цитата Сообщение от Serg046 Посмотреть сообщение
Ощущение что не отрабатывают math.h функции
- а ты смотрел ОДЗ своих функций

Цитата Сообщение от Serg046 Посмотреть сообщение
-log(fabs(X * X / (Y - 1))) / log(2.0);
у тебя вполне может быть логорифм нуля X = 0 или деление на ноль к примеру Y - 1 при Y = 1
Serg046
21 / 21 / 2
Регистрация: 07.01.2010
Сообщений: 376
06.06.2012, 01:26  [ТС]     Динамическая загрузка библиотеки #8
Где-то читал про какой-то битый файли VS не из-за него?

Добавлено через 30 секунд
-=ЮрА=-, почему тогда с этими же параметрами статически все норм
-=ЮрА=-
Заблокирован
Автор FAQ
06.06.2012, 01:30     Динамическая загрузка библиотеки #9
Serg046, мой совет попробуй сначала проект своего клиента с директ функциями прописанными в нём - выловишь для начала косяки связанные со значениями переменных, а уж потом "зашивай" функции в ДЛЛ

Добавлено через 2 минуты
Цитата Сообщение от Serg046 Посмотреть сообщение
=ЮрА=-, почему тогда с этими же параметрами статически все норм
- я допустим вообще не вижу норм не норм поцепи проекты или их код для анализа

Цитата Сообщение от Serg046 Посмотреть сообщение
L"lab2.dll"
и тут думаю с юникодом нелады
Цитата Сообщение от Serg046 Посмотреть сообщение
(hDllInstance, "MyFunc");
надо бы кодировку поменять. Короче мест где можно накосить столько что только скомпилировав свой проект у себя с конкретным кодом смогу что то конкретно сказать
Serg046
21 / 21 / 2
Регистрация: 07.01.2010
Сообщений: 376
06.06.2012, 01:31  [ТС]     Динамическая загрузка библиотеки #10
-=ЮрА=-, да а что ловить.
Такая длл тоже самое выкидывает
C++
1
2
3
4
5
6
7
8
#include <windows.h>
#include <math.h>
 
extern "C"  __declspec(dllexport) double MyFunc(double X, double Y)
{
    //double res = -log(fabs(X * X / (Y - 1))) / log(2.0); 
    return fabs(-5.0);
}
Добавлено через 47 секунд
Если можете помочь и есть время, я могу скинуть проект...
-=ЮрА=-
Заблокирован
Автор FAQ
06.06.2012, 01:33     Динамическая загрузка библиотеки #11
Serg046, просто поверь на слово пишу давно ну и по своему опыту уверен на 99,9%, что ошибка в каком то левом недочёте который не замечаешь (ну бывает и у меня такое смотришь на ошибку и вупор не понимаешь что она есть)

Добавлено через 1 минуту
Цитата Сообщение от Serg046 Посмотреть сообщение
Если можете помочь и есть время, я могу скинуть проект...
- через часов 10, я как раз допишу свой ночной фриланс и смогу полностью засесть на форуме, сейчас лишь поверхностно могу вникнуть в проблемму...
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
06.06.2012, 01:39     Динамическая загрузка библиотеки #12
функции LoadLibraryEx и GetProcAddress возвращают значения. почему ты не проверяешь, что вернулось? напиши так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
HINSTANCE hDllInstance = LoadLibraryEx(L"lab2.dll", 0, DONT_RESOLVE_DLL_REFERENCES );
 
if (hDllInstance == NULL){
   cout << "hDllInstance == NULL" << << endl;
}
 
    typedef double(*functionDll)( double, double );
    functionDll myFunc = (functionDll)GetProcAddress(hDllInstance, "MyFunc");
 
if (myFunc == NULL){
   cout << "myFunc == NULL" << << endl;
}
думаю, до math дело просто не доходит.
Serg046
21 / 21 / 2
Регистрация: 07.01.2010
Сообщений: 376
06.06.2012, 01:43  [ТС]     Динамическая загрузка библиотеки #13
novi4ok,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
HINSTANCE hDllInstance = LoadLibraryEx(L"lab2.dll", 0, DONT_RESOLVE_DLL_REFERENCES );
 
    if (hDllInstance == NULL){
        cout << "hDllInstance == NULL" << endl;
    }
 
    typedef double(*functionDll)( double, double );
    functionDll myFunc = (functionDll)GetProcAddress(hDllInstance, "MyFunc");
 
    if (myFunc == NULL)
    {
        cout << "myFunc == NULL" << endl;
    }
    else
    {
    cout << "Результат = " << myFunc(X, Y) << endl;
    }
Тоже самое исключение

Добавлено через 38 секунд
Не пойму почему без math тогда работает, ведь пишу тупо return 5; и возвращает же..
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
06.06.2012, 01:47     Динамическая загрузка библиотеки #14
извини, не обратил внимания, что return 5 работает.

тогда почему не попробовать воткнуть эту строчку прямо в main?

#include <math.h>
double dbl = -log(fabs(X * X / (Y - 1))) / log(2.0);

получим значение или исключение?
естественно, искользовать значения икса и игрека, при которых бросается исключение.

еще один эксперимент проведи: верни не просто 5, а, скажем, x+y. думаю, тоже вылетит.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2012, 01:49     Динамическая загрузка библиотеки
Еще ссылки по теме:

Динамическая память - C++
Есть 2 массива одной размерности: int *m1 = new int , *m2 = new int ; где N, M некие числа. Собственно вопрос: как...

Динамическая библиотека - C++
Как создать динамическую библиотеку, Объясните пожалуйста все пошагово. На Visual С++

динамическая матрица в си++ - C++
Ребят, задача такова Дана квадратная матрица A(N,N). Получить из неё массив B, если N - четно, и B, если N - нечетно, элементами...

Динамическая матрица - C++
Здравствуйте, помогите найти ошибку в динамической матрице: у меня почему-то вызывается автоматически деструктор в программе, хотя мне это...

Динамическая память - C++
Кто сможет помочь? Дана матрица А. Упорядочить элементы каждой строки в порядке не убывания. (нужно составить 2 программы с...


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

Или воспользуйтесь поиском по форуму:
Serg046
21 / 21 / 2
Регистрация: 07.01.2010
Сообщений: 376
06.06.2012, 01:49  [ТС]     Динамическая загрузка библиотеки #15
novi4ok, значение..
Yandex
Объявления
06.06.2012, 01:49     Динамическая загрузка библиотеки
Ответ Создать тему
Опции темы

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