2011-01-04 8 views
7

Muszę obsługiwać starą aplikację napisaną w języku C przy użyciu starego kompilatora Borlanda (BC 5).Używanie biblioteki DLL języka Visual C++ w starej wersji Borland C?

Niestety stara biblioteka TCP/IP, której używaliśmy, zaczyna pokazywać swój wiek i ma problemy z Vista & Win7.

mam nową bibliotekę funkcji dostępnych dla MS Visual C++ i chciałbym używać, aby uczynić DLL, które byłyby wymagalne z Borland C

Tak mam 2 problemy: 1) jak zrobić wywołanie Visual C++ DLL z programu Borland C, i 2) jeśli jest to wywołanie, jak wywołać funkcje C++ z zwykłego starego C?

Idealnie, cały projekt powinien zostać przekonwertowany na Visual C, ale istnieje wiele starszych funkcji, które uczynią ten projekt dużym przedsięwzięciem! Czekam na szybkie poprawki, aby utrzymać go przy życiu przez jakiś czas :)

Steve

+0

Nadal masz kompilator Borland C? Jeśli tak, możesz spróbować zmniejszyć obszar kontaktu między aplikacją a biblioteką. –

Odpowiedz

6

Napisz DLL przy użyciu Visual C++, który udostępnia swój interfejs jak funkcje systemu Windows STDCALL C. Funkcje Windows API są wykonywane podobnie. Funkcje, które eksponujesz w interfejsie, będą wykonywać funkcje, które musisz zastąpić w swoim programie. Wewnątrz biblioteki DLL wywołaj nową bibliotekę MS VC++ z porzuceniem.

Tak, aby uzyskać funkcję, która jest wymagalne od C i wykorzystuje protokół stos STDCALL zrobić coś takiego:

extern "C" int __stdcall foo();

musisz również dodać informacje na eksport funkcji z biblioteki DLL. Można to zrobić bezpośrednio w deklaracji jako takie:

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

Ale trzeba osobny plik nagłówka do użycia w kodzie BorlandC (który prawdopodobnie ma inną składnię określając część import DLL i stdcall część). W Visual C++ deklaracja byłoby użyć w kliencie będzie wyglądać następująco:

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

2

Można tworzyć Borland OMF bibliotekami importu z narzędzia Borland IMPLIB: IMPLIB -a "whatever.omf" „whatever.dll ", gdzie plik DLL jest utworzony przez MSVC.

Opcja -a służy do zgodności z Microsoft. Wygenerowany OMF (format pliku biblioteki import Borland), w połączeniu z plikiem nagłówkowym, który określa eksportowanych funkcji i ich konwencja wywołania (ów) powinno działać ... (wierzę IMPLIB było wokół w C++ Builder 5.)

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

Powiązane problemy