2011-01-04 5 views
7

이전 Borland 컴파일러 (BC 5)를 사용하여 C로 작성된 이전 응용 프로그램을 지원해야합니다.이전 Borland C에서 Visual C++ DLL을 사용합니까?

불행히도 우리가 사용했던 오래된 TCP/IP 라이브러리는 나이가 들기 시작하고 Vista & Win7 시스템에 문제가 있습니다.

내가 ++ MS 비주얼 C에 사용할 수있는 기능의 새로운 라이브러리를 가지고 있고, 나는 그래서 볼랜드 C.

에서 호출 될 DLL을 만들기 위해 그것을 사용하고 싶습니다, 나는이 문제가 : 1) Visual C++ DLL을 Borland C 프로그램에서 호출 할 수있게 만드는 방법 및 2) 호출 가능한 경우 일반 C에서 C++ 함수를 호출하는 방법?

이상적으로 전체 프로젝트를 Visual C로 변환해야하지만 해당 프로젝트를 주요 업무로 만들 수있는 많은 기존 기능이 있어야합니다. 나는 윈도우 STDCALL C의 함수로의 인터페이스를 공개 비주얼 C++를 사용하여 DLL을 쓰기 잠시 이상 :

스티브

+0

아직 C 언어 컴파일러가 있습니까? 그렇다면 앱과 라이브러리 사이의 접촉 영역을 줄이려고 할 수 있습니다. –

답변

6

살아 그것을 유지하기 위해 빠른 패치를 찾고 있어요. Windows API 함수도 비슷하게 수행됩니다. 인터페이스에서 노출하는 함수는 프로그램에서 대체해야하는 함수를 수행합니다. DLL 내부에서 포기 된 새 MS VC++ 라이브러리를 호출합니다. 당신은 또한 DLL에서 함수를 내보낼 수있는 정보를 추가해야합니다

extern "C" int __stdcall foo();

:

그래서 C에서 호출하고 STDCALL 스택 프로토콜은 같은 것을 할 사용하는 기능을 얻을 수 있습니다.

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

그러나 당신은 아마 DLL 가져 오기 부분과 STDCALL을 지정하는 구문이 다른 사용자의 BorlandC 코드에서 사용하기 위해 별도의 헤더 파일을 (해야합니다 : 당신은 같은 선언에 명시 적으로이 작업을 수행 할 수 부품).

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

2
당신은 볼랜드의 IMPLIB 유틸리티 볼랜드 OMF 가져 오기 libaries를 만들 수 있습니다

: IMPLIB -a "whatever.omf"을 "whatever.dll 비주얼 C++에서 클라이언트에서 사용하는 거라고 선언은 같을 것 ", 여기서 DLL 파일은 MSVC에 의해 생성 된 파일입니다.

-a 옵션은 Microsoft와 호환됩니다. 생성 된 OMF (Borland의 가져 오기 라이브러리 파일 형식)는 내 보낸 함수와 해당 호출 규칙을 지정하는 헤더 파일과 결합해야합니다 ... (IMPLIB가 C++ Builder 5에서 사용되었다고 생각합니다)

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

관련 문제