Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 10.12.2012
Сообщений: 18

Возрат double из dll

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

Студворк — интернет-сервис помощи студентам
Возникла проблема при использовании функий из .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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
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; double polp(double af,double...

Ошибка: 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 z); int main() { int a, b, c; ...

3
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
21.12.2012, 15:49
Цитата Сообщение от 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  [ТС]
опечатался,там это присутствует,просто старый код сюда случайно скопировал.
вот еще раз скидываю то как вызываю
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  [ТС]
Все.Решил сам.В общем надо не typedef double ( *SumFunctionType )(...);, а typedef double ( __cdecl *SumFunctionType )(...); и тогда будет счастье.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.12.2012, 22:28
Помогаю со студенческими работами здесь

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

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

Возрат строки из JavaScript
Web = new ChromeDriver(); Web.Manage().Window.Maximize(); Web.Navigate().GoToUrl(&quot;http://site.com/&quot;); ...

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru