Programación General > Visual Basic 6.0 e inferiores
error 49: la convencion de llamadas a dll es incorrecta
johndoe90:
Hola, estoy haciendo un programilla de VB 6.0 a partir de una dll en C++, y me da este error en la siguiente linea:
Alguien sabe el motivo o como solucionarlo?
Gracias.
Adjunto codigo:
Option Explicit
Private Sub Command1_Click()
Dim name As String
Dim cpu As Single
Dim mem As Long
name = " "
name_in.Text = name
cpu_in.Text = cpu
mem_in.Text = mem
DLLpon_imageName (name)
DLLpon_cpuUsage (cpu)
DLLpon_memUsage (mem)
MsgBox "Datos introducidos correctamente"
End Sub
Private Sub Command2_Click()
Dim palabra As String
Dim cpuUsage As Single
Dim memUsage As Long
palabra = " "
DLLdame_imageName (palabra)
DLLdame_cpuUsage (cpuUsage)
DLLdame_memUsage (memUsage)
name_out.Text = palabra
cpu_out.Text = cpuUsage
mem_out.Text = memUsage
End Sub
Codigo C++
typedef char Tpalabra [20];
class CProcess
{
private:
Tpalabra imageName;
float cpuUsage;
int memUsage;
public:
void pon_imageName(Tpalabra name);
Tpalabra* dame_imageName();
void pon_cpuUsage(float cpu);
float dame_cpuUsage();
void pon_memUsage(int mem);
int dame_memUsage();
float valor_inicial_cpu();
int valor_inical_mem();
};
#include "CProcess.h"
#include <string.h>
float CProcess::valor_inicial_cpu()
{
return cpuUsage;
}
int CProcess::valor_inical_mem()
{
return memUsage;
}
void CProcess::pon_imageName(Tpalabra name)
{
strcpy(imageName,name);
}
Tpalabra* CProcess::dame_imageName()
{
return (&imageName);
}
void CProcess::pon_cpuUsage(float cpu)
{
cpuUsage=cpu;
}
float CProcess::dame_cpuUsage()
{
return (cpuUsage);
}
void CProcess::pon_memUsage(int mem)
{
memUsage=mem;
}
int CProcess::dame_memUsage()
{
return (memUsage);
}
LIBRARY CProcess.dll
DESCRIPTION 'Dll CProcess'
HEAPSIZE 4024
EXPORTS
DLLpon_imageName @1
DLLdame_imageName @2
DLLpon_cpuUsage @3
DLLdame_cpuUsage @4
DLLpon_memUsage @5
DLLdame_memUsage @6
#include "Windows.h"
#include "CProcess.h"
CProcess my_Process;
void FAR PASCAL DLLpon_imageName(Tpalabra name)
{
my_Process.pon_imageName(name);
}
void FAR PASCAL DLLdame_imageName(Tpalabra name)
{
strcpy(name,*my_Process.dame_imageName());
}
void FAR PASCAL DLLpon_cpuUsage(float cpu)
{
my_Process.pon_cpuUsage(cpu);
}
float FAR PASCAL DLLdame_cpuUsage()
{
return my_Process.dame_cpuUsage();
}
void FAR PASCAL DLLpon_memUsage(int mem)
{
my_Process.pon_memUsage(mem);
}
int FAR PASCAL DLLdame_memUsage()
{
return my_Process.dame_memUsage();
}
Nebire:
--- Cita de: "johndoe90" ---Hola, estoy haciendo un programilla de VB 6.0 a partir de una dll en C++, y me da este error en la siguiente linea:
Alguien sabe el motivo o como solucionarlo?
...
Dim cpu As Single
DLLpon_cpuUsage (cpu)
MsgBox "Datos introducidos correctamente"
...
Dim cpuUsage As Single
DLLdame_cpuUsage (cpuUsage)
--- Fin de la cita ---
Supongo que la línea a la que te refieres es a la que has marcado en negrita....
----------
Post data: Me edito no había leído que más abajo incluías parte del código que estás usando:
--- Código: Visual Basic --- float FAR PASCAL DLLdame_cpuUsage(){return my_Process.dame_cpuUsage();}
Como puedes ver esa declaración no utiliza parámetros...
entonces tu código debería quedar así:
--- Código: Visual Basic --- ' esto es lo que has puesto:DLLdame_cpuUsage (cpuUsage) ' y esto es lo que debes poner:cpuUsage= DLLdame_cpuUsage ()
johndoe90:
Entonces si quisiera que me retornase un valor deberia escrbirse asi?
float FAR PASCAL DLLdame_cpuUsage(float cpuUsage)
{
return my_Process.dame_cpuUsage(cpuUsage);
}
Yo lo que quiero es que me retorne el valor previamente introducido en esa variable float.
m0skit0:
(REPE)
m0skit0:
Vamos a ver, si ya te lo ha puesto Nebire BIEN CLARITO.
En VB deberías poner:
--- Código: Visual Basic ---cpuUSage = DLLdame_cpuUsage() En C (la DLL):
--- Código: C ---float FAR PASCAL DLLdame_cpuUsage(){ return my_Process.dame_cpuUsage(cpuUsage);} Ah, y usa las etiquetas de código. :hola:
Navegación
[#] Página Siguiente
Ir a la versión completa