2011-01-04 15 views
7

Tengo que admitir una aplicación antigua escrita en C usando el antiguo compilador de Borland (BC 5).¿Usa una DLL de Visual C++ en el viejo Borland C?

Desafortunadamente, la antigua biblioteca de TCP/IP que habíamos usado está empezando a mostrar su edad y está teniendo problemas con las máquinas Vista & Win7.

tengo una nueva biblioteca de funciones disponibles para MS Visual C++, y me gustaría utilizar eso para hacer un archivo DLL que sería exigible desde el Borland C

Por lo tanto, tengo 2 problemas: 1) cómo hacer que una DLL de Visual C++ pueda invocarse desde un programa de Borland C y 2) si es invocable, cómo llamar a las funciones de C++ desde la antigua C simple?

Lo ideal es que todo el proyecto se convierta en Visual C, pero hay muchas características heredadas que harán que ese proyecto sea una gran empresa. Busco un parche rápido para mantenerlo vivo durante un tiempo más largo :)

Steve

+0

¿Todavía tiene el compilador Borland C? De ser así, puede intentar reducir el área de contacto entre la aplicación y la biblioteca. –

Respuesta

6

Escribir una DLL utilizando Visual C++ que expone su interfaz como funciones de Windows STDCALL C. Las funciones de la API de Windows se realizan de manera similar. Las funciones que expone en la interfaz realizarán las funciones que necesita reemplazar en su programa. Dentro de la DLL, llame a la nueva biblioteca de MS VC++ con abandono.

Así que para obtener una función que es exigible a partir de C y utiliza el protocolo pila STDCALL hacer algo como esto:

extern "C" int __stdcall foo();

también tendrá que agregar la información a exportar la función de la DLL. Es posible hacer esto de forma explícita en la declaración como tal:

extern "C" __declspec(dllexport) int __stdcall foo();

pero necesitará un archivo de cabecera por separado para su uso en su código BorlandC (que probablemente tiene una sintaxis diferente para especificar la parte de importación DLL y el STDCALL parte). En Visual C++ la declaración tendrá que utilizar en el cliente sería algo como:

extern "C" __declspec(dllimport) int __stdcall foo();

2

Puede crear Borland OMF libaries de importación con la utilidad IMPLIB de Borland: IMPLIB -a "whatever.omf" "whatever.dll ", donde el archivo DLL es el creado por MSVC.

La opción -a es compatible con Microsoft. El OMF generado (formato de archivo de la biblioteca de importación de Borland), combinado con un archivo de encabezado que especifica las funciones exportadas y sus convenciones de llamadas debería funcionar ... (Creo que IMPLIB estaba en C++ Builder 5.)

http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/EN/html/devwin32/implib_xml.html

Cuestiones relacionadas