Me da un fallo de conversión
Publicado por Meta (45 intervenciones) el 03/07/2020 21:22:31
Buenas gente del foro:
ME dan estos errores.
Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido
Mensaje La conversión de un tipo entero a un tipo de puntero requiere reinterpret_cast, conversión de estilo de C o conversión de estilo de función Interfaz_consola_nativo_01_cpp C:\Users\Usuario\Documents\Visual Studio 2019\Projects\DLL_y_interfaz_nativo_01_cpp\Interfaz_consola_nativo_01_cpp\Interfaz_consola_nativo_01_cpp.cpp 119
Código de la interfaz de C++ nativo:
La dll compila bien. Desde que puse este código falla.
Código de la DLL:
¿Seguro que cambiar de int a double o al reves?
Me la juego
Saludos.
ME dan estos errores.
Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido
Mensaje La conversión de un tipo entero a un tipo de puntero requiere reinterpret_cast, conversión de estilo de C o conversión de estilo de función Interfaz_consola_nativo_01_cpp C:\Users\Usuario\Documents\Visual Studio 2019\Projects\DLL_y_interfaz_nativo_01_cpp\Interfaz_consola_nativo_01_cpp\Interfaz_consola_nativo_01_cpp.cpp 119
Código de la interfaz de C++ nativo:
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// Versión que muestra título de la ventana, tamaño, posición del cursor, etc.
// Mostrar textos que viene de la dll es con wcout. Textos desde la interfaz con cout.
#include <iostream>
#include <windows.h> // Para mostrar texto en el título de la ventana.
using namespace std;
//using std::cout;
//using std::cin;
// Función posición del cursor.
void gotoxy(int x, int y)
{
HANDLE hcon;
hcon = GetStdHandle(STD_OUTPUT_HANDLE);
COORD dwPos;
dwPos.X = x;
dwPos.Y = y;
SetConsoleCursorPosition(hcon, dwPos);
}
// Definir estas funciones.
typedef LPTSTR(__stdcall* Mensaje)();
typedef double(__stdcall* Volumen)(double, double, double, double);
typedef double(__stdcall* Litros)(double, double);
typedef double(__stdcall* ResultadoPorcentaje)(int, double, double);
typedef double(__stdcall* VolumenLitros)(double, double, double, double, double);
typedef double(__stdcall* CantidadTubosLitros)(double, double, double);
typedef double(__stdcall* TotalLitros)(double, double, double);
int main(void)
{
// Variables.
const double Pi = 3.14;
double radio;
double altura;
//double volumen;
//double litros;
double nivelAgua;
//double resultadoPorcentaje;
//double resultadoLitros;
//double volumenLitros;
double mitadBarra;
double cantidadTubos;
//double cantidadTubosLitros;
//double totalLitros;
// Importar dll.
HINSTANCE hDLL = 0;
Mensaje mensaje;
Volumen volumen;
Litros litros;
ResultadoPorcentaje resultadoPorcentaje;
VolumenLitros volumenLitros;
CantidadTubosLitros cantidadTubosLitros;
TotalLitros totalLitros;
hDLL = LoadLibrary(L"C:\\Users\\Usuario\\Documents\\Visual Studio 2019\\Projects\\DLL_y_interfaz_nativo_01_cpp\\Debug\\DLL_y_interfaz_nativo_01_cpp.dll");
mensaje = (Mensaje)GetProcAddress(hDLL, "Mensaje");
volumen = (Volumen)GetProcAddress(hDLL, "Volumen");
litros = (Litros)GetProcAddress(hDLL, "Litros");
resultadoPorcentaje = (ResultadoPorcentaje)GetProcAddress(hDLL, "ResultadoPorcentaje");
volumenLitros = (VolumenLitros)GetProcAddress(hDLL, "VolumenLitros");
cantidadTubosLitros = (CantidadTubosLitros)GetProcAddress(hDLL, "CantidadTubosLitros");
totalLitros = (TotalLitros)GetProcAddress(hDLL, "totalLitros");
// Mostrar caracteres correctamente en pantalla y título de la ventana.
SetConsoleOutputCP(65001);
wchar_t titulo[128];
MultiByteToWideChar(CP_UTF8, 0, "Interfaz leer dll C++ nativo 2019.", -1, titulo, 128);
SetConsoleTitle(titulo);
// Tamaño de la pantalla. Se cambia en los dos últimos dígitos.
SMALL_RECT r = { 0, 0, 49, 35 }; // X = 49, Y = 9.
SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), TRUE, &r);
// Ocultar cursor.
CONSOLE_CURSOR_INFO cci;
GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
cci.bVisible = 1; // 0 oculta cursor. 1 muestra cursor.
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
// Posición del cursor.
gotoxy(3, 2);
// Mostrar textos en pantalla.
wcout << mensaje() << endl;
gotoxy(0, 4);
cout << "Introduce el radio en m.: ";
cin >> radio;
cout << "Introduce la altura en m. ";
cin >> altura;
cout << "Introduce altura del agua. Máximo es de " << altura << ":";
cin >> nivelAgua;
cout << "Introduces cantidad de tubos: ";
cin >> cantidadTubos;
// Dibujo de la barra.
cout << "\n";
cout << ("0 % 50 % 100 %") << endl;
cout << ("┌────────────────────────┬───────────────────────┐") << endl;
// Mitad de la barra para que no sea muy grande en la pantalla.
mitadBarra = resultadoPorcentaje / 2;
if (mitadBarra > 50)
{
mitadBarra = 50;
}
// Rellenar la barra.
for (double i = 1; i <= mitadBarra; i++)
{
cout << ("█");
}
// Si llega a 100 se pone el # en rojo.
if (resultadoPorcentaje > 100)
{
cout << ("#");
}
// Fin dibujo de la barra.
// Pisición del texto a mostrar.
gotoxy(0, 11);
//cout << "\nPorcentaje: " << resultadoPorcentaje << " %.";
FreeLibrary(hDLL);
// Esperando pulsar Enter para salir.
cin.get();
return 0;
}
La dll compila bien. Desde que puse este código falla.
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
// Dibujo de la barra.
cout << "\n";
cout << ("0 % 50 % 100 %") << endl;
cout << ("┌────────────────────────┬───────────────────────┐") << endl;
// Mitad de la barra para que no sea muy grande en la pantalla.
mitadBarra = resultadoPorcentaje / 2;
if (mitadBarra > 50)
{
mitadBarra = 50;
}
// Rellenar la barra.
for (double i = 1; i <= mitadBarra; i++)
{
cout << ("█");
}
// Si llega a 100 se pone el # en rojo.
if (resultadoPorcentaje > 100)
{
cout << ("#");
}
// Fin dibujo de la barra.
Código de la DLL:
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
49
50
51
52
#include "pch.h"
extern "C"
{
__declspec(dllexport) LPTSTR WINAPI Mensaje();
__declspec(dllexport) double WINAPI Volumen(double, double, double, double);
__declspec(dllexport) double WINAPI Litros(double, double);
__declspec(dllexport) double WINAPI ResultadoPorcentaje(int, double, double);
__declspec(dllexport) double WINAPI VolumenLitros(double, double, double, double, double);
__declspec(dllexport) double WINAPI CantidadTubosLitros(double, double, double);
__declspec(dllexport) double WINAPI TotalLitros(double, double, double);
};
// Mensaje.
LPTSTR __stdcall Mensaje() { return LPTSTR(L"Hola. Saludos desde la dll. Versión: 1.0.0"); }
// Cálculo volumen.
double __stdcall Volumen(double volumen, double PI, double radio, double altura)
{
return volumen = PI * (radio * radio) * altura;
}
// Cálculo litros.
double __stdcall Litros(double litros, double volumen)
{
return litros = volumen * 1000;
}
// Cálculo porcentaje en % del litro de agua.
double __stdcall ResultadoPorcentaje(int resultadoPorcentaje, double nivelAgua, double altura)
{
return resultadoPorcentaje = nivelAgua * (100 / altura);
}
// Cálculo litros de agua.
double __stdcall VolumenLitros(double volumenLitros, double PI, double radio, double nivelAgua, double resultadoLitros)
{
return volumenLitros = PI * (radio * radio) * nivelAgua;
return resultadoLitros = volumenLitros * 1000;
}
// Cálculo litros por cantidad de tubos
double __stdcall CantidadTubosLitros(double cantidadTubosLitros, double cantidadTubos, double resultadoLitros)
{
return cantidadTubosLitros = cantidadTubos * resultadoLitros;
}
// Cálculo cantidad de litros con total de tubos.
double __stdcall TotalLitros(double totalLitros, double litros, double cantidadTubos)
{
return totalLitros = litros * cantidadTubos;
}
¿Seguro que cambiar de int a double o al reves?
Me la juego
Saludos.
Valora esta pregunta


0