C/Visual C - El novato y las dll

 
Vista:

El novato y las dll

Publicado por Eue (8 intervenciones) el 05/05/2003 10:30:47
Olas. Soy un programador iniciado y quería saber un par de cosillas:

Una vez creada una dll en visual basic y otra en visual c++, ¿el lenguaje interno de la dll es diferente uno de otro? El problema me surgió cuando quería emplear una dll mía que maneja hojas de cálculo de excel. La hice en VB. Las aplicaciones que creo en este lenguaje y la utilizan funcionan, pero si abro la dll con una interfaz con lenguaje PL/SQL(Oracle) no. Cree otras dll en Visual C y si que van con dicha interfaz.

Las dll que hago en Visual C me dan problemas en el manejo de punteros a caracter (tanto en aplicaciones de VB como en interfaces en Oracle). ¿Hay alguna solución, o es preferible trabajar con arrays de caracteres y me olvido del paso de datos por referencia?

Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Diferencias entre DLLs en Visual Basic y Visual C++ y manejo de punteros

Publicado por Alejandro (1106 intervenciones) el 20/05/2025 00:27:41

Diferencias entre DLLs en Visual Basic y Visual C++



1. Lenguaje interno y ABI (Application Binary Interface):
- Las DLLs creadas en Visual Basic (VB) y Visual C++ (VC++) tienen diferentes convenciones de llamada y estructuras internas. Esto significa que el modo en que se pasan los parámetros, se gestionan los tipos de datos y se manejan las excepciones puede variar significativamente entre ambos lenguajes.
- Visual Basic utiliza un modelo de objetos y una gestión de memoria diferente, mientras que C++ permite un control más directo sobre la memoria y los punteros.

2. Compatibilidad:
- Las DLLs de VB están diseñadas para ser utilizadas principalmente dentro del ecosistema de Microsoft y pueden no ser completamente compatibles con otros lenguajes o entornos, como PL/SQL en Oracle.
- Las DLLs de C++ son más flexibles y pueden ser utilizadas en una variedad de entornos, pero requieren que se sigan ciertas convenciones de llamada y que se manejen adecuadamente los tipos de datos.

Problemas con punteros a caracteres en C++



1. Manejo de punteros:
- Cuando pasas punteros a caracteres (como `char*`) entre diferentes lenguajes, es crucial asegurarte de que ambos lenguajes estén utilizando la misma convención de codificación de caracteres (por ejemplo, ANSI vs. Unicode).
- En C++, si estás utilizando `char*`, asegúrate de que la cadena esté terminada en nulo (`'\0'`). Si estás pasando cadenas a VB, considera usar `BSTR` o `LPWSTR` para cadenas Unicode.

2. Uso de arrays de caracteres:
- Si estás teniendo problemas con punteros, una solución más sencilla puede ser trabajar con arrays de caracteres en lugar de punteros. Esto puede simplificar el manejo de la memoria y evitar problemas de referencia.
- Por ejemplo, puedes definir una función en C++ que acepte un array de caracteres y su tamaño, en lugar de un puntero. Esto puede hacer que la interfaz sea más clara y menos propensa a errores.

Ejemplo de función en C++ con array de caracteres



Aquí tienes un ejemplo de cómo podrías definir una función en C++ que utiliza un array de caracteres:

1
2
3
4
5
6
extern "C" __declspec(dllexport) void procesarDatos(char datos[], int longitud) {
    for (int i = 0; i < longitud; i++) {
        // Procesar cada carácter
        datos[i] = toupper(datos[i]); // Ejemplo: convertir a mayúsculas
    }
}

Consideraciones finales



- Interoperabilidad: Asegúrate de que las convenciones de llamada y los tipos de datos sean compatibles entre los lenguajes. Puedes usar `extern "C"` en C++ para evitar la mangling de nombres y facilitar la llamada desde otros lenguajes.
- Pruebas: Realiza pruebas exhaustivas al integrar DLLs en diferentes entornos para asegurarte de que los datos se pasen correctamente y que no haya problemas de memoria.
- Documentación: Consulta la documentación de cada lenguaje y entorno para entender mejor cómo manejan las DLLs y los tipos de datos.

¡Buena suerte con tu programación, Eue!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar