0 / 0 / 0
Регистрация: 10.12.2012
Сообщений: 18
1

Возрат double из dll

21.12.2012, 15:31. Показов 568. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Возникла проблема при использовании функий из .dll. Я написал свою dll в которой имеются ф-ии с возвращаемым значением типа double,но когда я пытаюсь использовать данные ф-ии,то почему то мои числа типа 0,0045 превращаются в 0,а 1,09 в 1 и т.п.В чем ошибка и как ее исправить,почему округляются значения?
Вот код dll
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <windows.h>
#include <cmath>
#include <math.h>
#include "mydll.h"
double CalcQ(double Fw)
{
     double Q;
     Q = (W * H * Vu * Fw) / 2;
     return Q;//возвращает 0,а не 0,0045
}
double CalcFw()
{
     double Fw;
     Fw = 0.125 * pow((H / W), 2) - 0.625 * (H / W) + 1;
     return Fw;//возвращает 1,а не 1,09        
}
вот .h dll-ки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef __MYDLL_H
#define __MYDLL_H 
#ifdef __cplusplus
 
extern "C"
{
#endif
__declspec( dllexport ) double CalcFw();
__declspec( dllexport ) double CalcQ(double Fw);
#ifdef __cplusplus
}
#endif 
#endif /* __MYDLL_H */
вот как я вызываю
C++
1
2
3
4
5
6
7
8
9
10
11
typedef double ( *SumFunctionType )(...);
HMODULE hLib = LoadLibrary(TEXT("tdll.dll"));           
if(hLib)
{
double W,H,Vu,Fw,Q;
W=0.2;H=0.03;Vu=1.5;
SumFunctionAddress = (SumFunctionType)GetProcAddress(hLib, "CalcFw");
Fw = SumFunctionAddress ( H, W );   
SumFunctionAddress1 = (SumFunctionType)GetProcAddress(hLib, "CalcQ");
Q=SumFunctionAddress1(Fw, W, H, Vu); 
}
p.s. пишу в Visual Studio 2010, C++, WinForm
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.12.2012, 15:31
Ответы с готовыми решениями:

Обращение к double** из метода dll вызывает ошибку памяти
Есть класс который создает двухмерный массив. Этот класс экпортирую в dll и использую полученную...

Ошибки error C2296: -: недопустимо, левый операнд имеет тип "double (__cdecl *)(double,double,double
Думаю из-за polp #include&lt;iostream&gt; #include&lt;cmath&gt; #include&lt;cstdlib&gt; using namespace std;...

Ошибка: error LNK2001: unresolved external symbol "double __cdecl Akk(double,double,double)"
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; double Akk(double x, double y, double...

Ругается на строчку double[] wArray = new double[n];, double[] w = new double[n];
Ругается на строчку double wArray = new double;, double w = new double; Не удаётся преобразовать...

3
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
21.12.2012, 15:49 2
Цитата Сообщение от HEKPUCT Посмотреть сообщение
Вот код dll
Что это за переменные W, H, Vu и чему они равны ?

У вас объявление и инициализация в основной программе .
Как о них длл должна узнать ?
Цитата Сообщение от HEKPUCT Посмотреть сообщение
W=0.2;H=0.03;Vu=1.5;
0
0 / 0 / 0
Регистрация: 10.12.2012
Сообщений: 18
21.12.2012, 16:11  [ТС] 3
опечатался,там это присутствует,просто старый код сюда случайно скопировал.
вот еще раз скидываю то как вызываю
C++
1
2
3
4
5
SumFunctionAddress = (SumFunctionType)GetProcAddress(hLib, "CalcFw");
Y = Vu / H;
Fw = SumFunctionAddress ( H, W );   
SumFunctionAddress1 = (SumFunctionType)GetProcAddress(hLib, "CalcQ");
Q=SumFunctionAddress1( Fw,W,H, Vu);
и dll
C++
1
2
3
4
5
6
7
8
9
10
11
12
double CalcQ(double Fw , double W,double H, double Vu)
        {
            double Q;
            Q = (W * H * Vu * Fw) / 2;
            return Q;
        }
 double CalcFw( double H, double W)
        {
            double Fw;
            Fw = 0.125 * pow((H / W), 2) - 0.625 * (H / W) + 1;
            return Fw;
        }
.h dll-ки
C++
1
2
__declspec( dllexport ) double CalcQ(double Fw , double W,double H, double Vu);
__declspec( dllexport ) double CalcFw( double H, double W);
0
0 / 0 / 0
Регистрация: 10.12.2012
Сообщений: 18
21.12.2012, 22:28  [ТС] 4
Все.Решил сам.В общем надо не typedef double ( *SumFunctionType )(...);, а typedef double ( __cdecl *SumFunctionType )(...); и тогда будет счастье.
0
21.12.2012, 22:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.12.2012, 22:28
Помогаю со студенческими работами здесь

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

Возрат строки из JavaScript
Web = new ChromeDriver(); Web.Manage().Window.Maximize(); ...

Возрат массива из функции
Добрый вечер. Подскажите пожалуйста как вернуть массив #include &quot;stdafx.h&quot; #include &lt;iostream&gt;...

Возрат объекта из функции
#include &lt;iostream&gt; using namespace std; class A { public: A() { cout&lt;&lt;&quot;constr.\n&quot;; }...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru