Cuando trabajas con una DLL COM creada en Visual Basic y deseas llamarla desde Visual C++, hay varios aspectos a considerar. Aquí te dejo algunos pasos y recomendaciones para solucionar los problemas que mencionas:
1. Verifica la exportación de funciones en la DLL COM
Asegúrate de que las funciones que deseas llamar desde Visual C++ están correctamente exportadas en tu DLL COM. En Visual Basic, las funciones deben ser declaradas como `Public` para que sean accesibles. Además, asegúrate de que estás utilizando la sintaxis correcta para la exportación.
2. Uso de `#import`
Cuando utilizas `#import`, asegúrate de que estás importando correctamente la biblioteca de tipos (TLB) generada por tu DLL COM. La sintaxis básica es:
Después de importar, puedes acceder a las clases y métodos de la DLL. Si el compilador te da un error sobre funciones no estáticas, verifica que estás llamando a los métodos de la clase correctamente. Por ejemplo:
3. Uso de `LoadLibrary` y `GetProcAddress`
Si decides usar `LoadLibrary` y `GetProcAddress`, ten en cuenta que estas funciones son más adecuadas para DLLs no COM. Para DLLs COM, es mejor usar `CoCreateInstance` para crear instancias de las clases. Sin embargo, si necesitas usar `GetProcAddress`, asegúrate de que las funciones están exportadas correctamente y que estás utilizando el nombre correcto.
Para exportar funciones en una DLL, puedes usar un archivo de definición (.def) o la directiva `__declspec(dllexport)` en el código de la DLL.
4. Ejemplo de uso de `CoCreateInstance`
Aquí tienes un ejemplo básico de cómo crear una instancia de una clase COM y llamar a un método:
5. Depuración y verificación
- Asegúrate de que la DLL está registrada correctamente en el sistema. Puedes usar `regsvr32` para registrar la DLL si es necesario.
- Verifica que la versión de la DLL que estás utilizando es la correcta y que no hay conflictos de versiones.
- Si sigues teniendo problemas, considera usar herramientas como `Dependency Walker` para verificar las dependencias de la DLL y asegurarte de que todas están presentes.
Espero que estas recomendaciones te ayuden a resolver los problemas que estás enfrentando al llamar a tu DLL COM desde Visual C++. ¡Buena suerte, Antonio!