SoloCodigo
Programación General => C/C++ => Visual C++ => Mensaje iniciado por: johndoe90 en Lunes 27 de Abril de 2009, 13:15
-
Hola, estoy intentando hacer un programa en VB a partir de una dll hecha con C++ en objetos. El programa consiste en introducir el nombre, uso de cpu y memoria de un proceso, y luego mostrarlo, todo va bien hasta que se le da a mostrar, entonces me sale el error 49: "La convencion de llamadas a DLL es incorrecta". Alguien sabria decirme donde esta el fallo?
Gracias.
Adjunto código.
CProcess.h
typedef char Tpalabra [20];
class CProcess
{
private:
Tpalabra imageName;
float cpuUsage;
int memUsage;
public:
CProcess();
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();
};
CProcess.cpp
#include "CProcess.h"
#include <string.h>
Tpalabra newProc;
CProcess::CProcess()
{
strcpy(imageName,newProc);
cpuUsage=0.0;
memUsage=0;
}
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);
}
DLLCProcess.cpp
#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();
}
CProcess.def
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
VB
Form 1
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
Module1
Option Explicit
Public Declare Function DLLpon_imageName _
Lib "CProcess.dll" _
(ByVal name As String) _
As Long
Public Declare Function DLLdame_imageName _
Lib "CProcess.dll" _
(ByVal imageName As String) _
As Long
Public Declare Function DLLpon_cpuUsage _
Lib "CProcess.dll" _
(ByVal cpu As Single) _
As Long
Public Declare Function DLLdame_cpuUsage _
Lib "CProcess.dll" _
(ByVal cpuUsage As Single) _
As Long
Public Declare Function DLLpon_memUsage _
Lib "CProcess.dll" _
(ByVal mem As Long) _
As Long
Public Declare Function DLLdame_memUsage _
Lib "CProcess.dll" _
(ByVal memUsage As Long) _
As Long
PD: Hay alguna manera de no meter un codigo tan largo en un post? Comprimirlo o algo asi?
-
Podes usar la etiqueta CODE (entre corchetes []).
Como no decis exactamente en que LINEA se produce el error te dejo ese recurso:
http://www.recursosvisualbasic.com.ar/h ... ic-c++.htm (http://www.recursosvisualbasic.com.ar/htm/tutoriales/interaccion-visual-basic-c++.htm" onclick="window.open(this.href);return false;)
-
Lo he arreglado un poco más, pero me sigue dando el mismo error, te subrayo en negrita donde me lo da
La etiqueta [CODE] donde va exactamente?
Y bueno, ya que esto es una mezcla de C++ y VB, no se si ponerlo en este foro de C++ o en el de VB, ya que el error es en VB lo postearé en el otro foro.
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);
}
#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();
}
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
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
-
Solucionado.