DLL en C++ para Visual Basic 6
Hola amigos, soy nuevo en esto, asi que espero que me ayudeis mucho. Gracias por adelantado.
Mi problema es que me gustaria saber como se implementaria una DLL en C++ para ser llamada desde un programa realizado en Visual Basic 6.
Buenom espero vuestras contestaciones, hasta luego.
Mi problema es que me gustaria saber como se implementaria una DLL en C++ para ser llamada desde un programa realizado en Visual Basic 6.
Buenom espero vuestras contestaciones, hasta luego.
Si la dll la has compilado con llamada estandard (No se Visual C++ pero creo recodar que es __std_call), la dll sera registrable como un objeto ActiveX. En ese caso solo tienes que añadir la referencia a tu dll (ProjectosReferencias) y trabajar normalmente.
En caso contrario tendras que trabajar como si fuese una libreria de windows en cuyo caso tendras que declarar cada una de las funciones que vayas a utilizar del modo Public Declare Function GetWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As Long, ByVal wCmd As Long) As Long. Es solo un ejemplo "user32" es el nombre del libreria. Si te has declarado alguna estructura es necesario que la definas como un tipo Type de VB.
En caso contrario tendras que trabajar como si fuese una libreria de windows en cuyo caso tendras que declarar cada una de las funciones que vayas a utilizar del modo Public Declare Function GetWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As Long, ByVal wCmd As Long) As Long. Es solo un ejemplo "user32" es el nombre del libreria. Si te has declarado alguna estructura es necesario que la definas como un tipo Type de VB.
Existen dos tipos de dlls: ActiveX, y estándar. Un dll ActiveX es muchísimo más complicada de hacer pero ofrece las mayores ventajas. Sin embargo, aquí no puedo ni empezar a describir cómo crear una. Existen un par de lugares que indican cómo hacerla. En caso de que no sepa, dlls ActiveX proveen objetos COM, que son los objetos que se usan en VB.
Si lo que usted desea hacer es un conjunto de funciones solamente (es decir, no desea proveer objetos), entonces cree una dll estándar. Es bastante sencillo: Cree sus funciones asegurándose que el "calling convention" es __stdcall, luego cree un archivo .def señalando las funciones que desea exportar (visibles para los usuarios de la dll), y finalmente compile. Así de sencillo.
Si lo que usted desea hacer es un conjunto de funciones solamente (es decir, no desea proveer objetos), entonces cree una dll estándar. Es bastante sencillo: Cree sus funciones asegurándose que el "calling convention" es __stdcall, luego cree un archivo .def señalando las funciones que desea exportar (visibles para los usuarios de la dll), y finalmente compile. Así de sencillo.
Como nota, solamente las bibliotecas ActiveX pueden referenciarse en VB directamente mediante el cuadro de diálogo de Referencias, y solamente si contienen su type library como un recurso incrustado en el archivo dll.
Pensándolo bien, una biblioteca estándar también puede referenciarse directamente, si usted provee un .tlb para ella. Este .tlb tendría descripciones de un solo módulo donde se definen los puntos de entrada de las distintas funciones en la biblioteca. Para obtener los "entry points", puede utilizar la herramienta Depends de C++.
