|
0 / 0 / 0
Регистрация: 19.12.2013
Сообщений: 40
|
|
Вызов функции с несколькими возвращаемыми параметрами04.04.2021, 16:13. Показов 1755. Ответов 12
Метки нет (Все метки)
Вызываю функцию
wspVUSHCVWDERPTPT(p, t, v, u,.......) из dll c несколькими возвращаемыми параметрами. mingw32-g++.exe дает ошибку. #include <iostream> #include <windows.h> /**************************************** ***********************************/ typedef double (*pfn_wspPST)(double); typedef double (*pfn_wspVPT)(double,double); //Здесь вопрос. Как записать typedef для фунции с несколькими возвращаемыми параметрами //p,t - входные параметры //все отальные выходные typedef double (*pfn_wspVUSHCVWDERPTPT)(double, double, double &, double &, double &, double &, double &, double &, double &, double &, double &, double &, double &, double &, double &, double & ); int main(int, const char**) { pfn_wspPST wspPST; pfn_wspVPT wspVPT; pfn_wspVUSHCVWDERPTPT(); HMODULE dll = LoadLibrary("OKAWSP6.dll"); if ( !dll ) { std::cerr << "Can`t load library!" << std::endl; return 1; } wspPST = (pfn_wspPST)GetProcAddress(dll, "wspPST"); wspVPT = (pfn_wspVPT)GetProcAddress(dll, "wspVPT"); wspVUSHCVWDERPTPT= (pfn_wspVUSHCVWDERPTPT)GetProcAddress(dl l, "wspVUSHCVWDERPTPT"); if ( !wspPST ) { std::cerr << "Not wspPST in the library!" << std::endl; FreeLibrary(dll); return 1; } double dP=wspPST(420.0); std::cout<<dP<<" Pa \n"; double VV=wspVPT(4000000.0,400.0); std::cout<<VV<<" m3 \n"; double p=36000000 ; double t=140+270 ; double v = 0, u = 0, s = 0, h = 0, Cv = 0, w = 0, DVDPt = 0, DUDPt = 0, DSDPt = 0, DHDPt = 0, DVDTp = 0,DUDPTp=0, DSDPTp = 0, DHDTp = 0; //wspVUSHCVWDERPTPT функция из okawsp6.dll double test = wspVUSHCVWDERPTPT(p, t, v, u, s, h, Cv, w, DVDPt, DUDPt, DSDPt, DHDPt, DVDTp, DUDPTp, DSDPTp, DHDTp); std::cout<<v<< "v \n"; FreeLibrary(dll); return 0; }
0
|
|
| 04.04.2021, 16:13 | |
|
Ответы с готовыми решениями:
12
Вызов конструктора с несколькими параметрами при использовании push_back() в vector'е
Поиск неподвижных точек у функции с несколькими параметрами |
|
458 / 294 / 191
Регистрация: 23.06.2018
Сообщений: 678
|
|
| 04.04.2021, 16:59 | |
|
Честно говоря тестировать мне это абсолютно нечем, но исходя из вот этой прекрасной ссылки и того что это должно ещё и в Си работать, функция принимает не ссылки, а указатели.
1
|
|
|
90 / 109 / 15
Регистрация: 26.01.2014
Сообщений: 710
|
|
| 04.04.2021, 17:09 | |
|
Ты используешь библиотечную функцию? Семейство "С" не любит возвращать из функции много значений. Где описано (словами, в описании функции) что она возвращает? Всегда твой - Etien.
0
|
|
|
0 / 0 / 0
Регистрация: 19.12.2013
Сообщений: 40
|
|
| 04.04.2021, 17:17 [ТС] | |
|
И с указателями то же даёт ошибку
#include <iostream> #include <windows.h> /**************************************** ***********************************/ typedef double (*pfn_wspPST)(double); typedef double (*pfn_wspVPT)(double,double); //Здесь вопрос. Как записать typedef для фунции с несколькими возвращаемыми параметрами //p,t - входные параметры //все отальные выходные typedef double (*pfn_wspVUSHCVWDERPTPT)(double, double, double *, double *, double *, double *, double *, double *, double *, double *, double *, double *, double *, double *, double *, double * ); int main(int, const char**) { pfn_wspPST wspPST; pfn_wspVPT wspVPT; pfn_wspVUSHCVWDERPTPT; HMODULE dll = LoadLibrary("OKAWSP6.dll"); if ( !dll ) { std::cerr << "Can`t load library!" << std::endl; return 1; } wspPST = (pfn_wspPST)GetProcAddress(dll, "wspPST"); wspVPT = (pfn_wspVPT)GetProcAddress(dll, "wspVPT"); wspVUSHCVWDERPTPT= (pfn_wspVUSHCVWDERPTPT)GetProcAddress(dl l, "wspVUSHCVWDERPTPT"); if ( !wspPST ) { std::cerr << "Not wspPST in the library!" << std::endl; FreeLibrary(dll); return 1; } double dP=wspPST(420.0); std::cout<<dP<<" Pa \n"; double VV=wspVPT(4000000.0,400.0); std::cout<<VV<<" m3 \n"; double p=36000000 ; double t=140+270 ; double v = 0, u = 0, s = 0, h = 0, Cv = 0, w = 0, DVDPt = 0, DUDPt = 0, DSDPt = 0, DHDPt = 0, DVDTp = 0,DUDPTp=0, DSDPTp = 0, DHDTp = 0; //wspVUSHCVWDERPTPT функция из okawsp6.dll double test = wspVUSHCVWDERPTPT(p, t, v, u, s, h, Cv, w, DVDPt, DUDPt, DSDPt, DHDPt, DVDTp, DUDPTp, DSDPTp, DHDTp); std::cout<<v<< "v \n"; FreeLibrary(dll); return 0; } Вот dll
0
|
|
|
0 / 0 / 0
Регистрация: 19.12.2013
Сообщений: 40
|
|
| 04.04.2021, 17:33 [ТС] | |
|
int main(int, const char**) {
... pfn_wspVUSHCVWDERPTPT; //Ругается на эту строку D:\Projects\cpp_wsp\main.cpp|32|error: declaration does not declare anything [-fpermissive]|
0
|
|
|
Вездепух
12938 / 6805 / 1821
Регистрация: 18.10.2014
Сообщений: 17,226
|
|
| 04.04.2021, 17:38 | |
|
1
|
|
|
0 / 0 / 0
Регистрация: 19.12.2013
Сообщений: 40
|
|
| 04.04.2021, 18:07 [ТС] | |
|
Мой косяк.
Должно быть pfn_wspVUSHCVWDERPTPT wspVUSHCVWDERPTPT; Теперь ругается на эту строку double test = wspVUSHCVWDERPTPT(p, t, v, u, s, h, Cv, w, DVDPt, DUDPt, DSDPt, DHDPt, DVDTp, DUDPTp, DSDPTp, DHDTp); D:\Projects\cpp_wsp\main.cpp|61| error: cannot convert 'double' to 'double*' in argument passing|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 04.04.2021, 18:10 | |
Сообщение было отмечено alvikz как решение
Решение
1
|
|
|
0 / 0 / 0
Регистрация: 19.12.2013
Сообщений: 40
|
|
| 04.04.2021, 18:19 [ТС] | |
|
Вернул
typedef double (*pfn_wspVUSHCVWDERPTPT)(double, double, double &, double &, double *, double &, double &, double &, double &, double &, double &, double &, double &, double &, double &, double & ); ругается на double test = wspVUSHCVWDERPTPT(p, t, v, u, s, h, Cv, w, DVDPt, DUDPt, DSDPt, DHDPt, DVDTp, DUDPTp, DSDPTp, DHDTp); D:\Projects\cpp_wsp\main.cpp|61|error: cannot convert 'double' to 'double*' in argument passing|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 04.04.2021, 18:26 | |
|
1
|
|
|
0 / 0 / 0
Регистрация: 19.12.2013
Сообщений: 40
|
||||||
| 04.04.2021, 19:40 [ТС] | ||||||
|
Программа проходит
Выводит double dP=wspPST(140+270); std::cout<<dP<<" Pa \n"; double VV=wspVPT(4000000.0,400.0); std::cout<<VV<<" m3 \n"; И на этой строке вылетает. double test = wspVUSHCVWDERPTPT(p, t, v, u, s, h, Cv, w, DVDPt, DUDPt, DSDPt,DHDPt,DVDTp,DUDPTp,DSDPTp,DHDTp); std::cout<<test<< "test \n"; Добавлено через 23 минуты Вылет 61 double test = wspVUSHCVWDERPTPT(p, t, v, u, s, h, Cv, w, DVDPt, DUDPt, DSDPt,DHDPt,DVDTp,DUDPTp,DSDPTp,DHDTp); std::cout<<DVDPt<< " -DVDPt \n"; |=== Сборка: Debug in cpp_wsp (compiler: GNU GCC Compiler) ===| D:\Projects\cpp_wsp\main.cpp||In function 'int main(int, const char**)':| D:\Projects\cpp_wsp\main.cpp|61|warning: unused variable 'test' [-Wunused-variable]| ||=== Build finished: 0 error(s), 1 warning(s) (0 minute(s), 7 second(s)) ===| ||=== Запустить: Debug in cpp_wsp (compiler: GNU GCC Compiler) ===| Добавлено через 17 минут Вот весь код
0
|
||||||
|
0 / 0 / 0
Регистрация: 19.12.2013
Сообщений: 40
|
|
| 05.04.2021, 16:58 [ТС] | |
|
Все прекрасно заработало.
Спасибо всем кто откликнулся.
0
|
|
|
0 / 0 / 0
Регистрация: 19.12.2013
Сообщений: 40
|
|
| 08.04.2021, 12:19 [ТС] | |
|
Debug
собрался и прекрасно работает. mingw32-g++.exe -Wall -fexceptions -std=c++14 -ID:\CODEBLOCKS -c D:\CDBFortran\Project\cpp_wsp\main.cpp -o obj\Debug\main.o mingw32-g++.exe -o bin\Debug\cpp_wsp.exe obj\Debug\main.o -static-libstdc++ D:\MinGW\bin\okawsp6.dll Почему то Release вылетает mingw32-g++.exe -Wall -fexceptions -std=c++14 -ID:\CDBFortran\Project\cpp_wsp\ -ID:\CODEBLOCKS -c D:\CDBFortran\Project\cpp_wsp\main.cpp -o obj\Release\main.o mingw32-g++.exe -o bin\Release\cpp_wsp.exe obj\Release\main.o -static-libstdc++ D:\MinGW\bin\okawsp6.dll При сборке Release прога вылетает при обращении к функции wspVUSHCVWDERPTPT(...) из okawsp.dll. Хотя другие функции работают.
0
|
|
| 08.04.2021, 12:19 | |
|
Помогаю со студенческими работами здесь
13
Импорт функции с несколькими возвращаемымы параметрами (water steam pro) Вызов родительской функции с параметрами из функции в компоненте Вызов функции с сохранёнными параметрами Вызов функции по указателю с параметрами Вызов функции с параметрами (две ошибки) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|