2011-01-04 39 views
7

Tôi phải hỗ trợ một ứng dụng cũ được viết bằng C bằng Trình biên dịch Borland cũ (BC 5).Sử dụng Visual C++ DLL trong Borland C cũ?

Thật không may, thư viện TCP/IP cũ mà chúng tôi đã sử dụng bắt đầu cho biết tuổi của nó và đang gặp sự cố với máy tính Vista & Win7.

Tôi có một thư viện mới của các chức năng có sẵn cho MS Visual C++, và tôi muốn sử dụng để thực hiện một DLL đó sẽ là callable từ Borland C.

Vì vậy, tôi có 2 vấn đề: 1) làm thế nào để làm cho một Visual C + + DLL gọi từ một chương trình Borland C, và 2) nếu nó được gọi, làm thế nào để gọi các chức năng C + + từ đồng bằng cũ C?

Lý tưởng nhất, toàn bộ dự án nên được chuyển đổi thành Visual C, nhưng có rất nhiều tính năng kế thừa sẽ làm cho dự án trở thành một dự án lớn! Tôi đang tìm kiếm một bản vá nhanh chóng để giữ cho nó sống trong một thời gian lâu hơn :)

Steve

+0

Bạn vẫn có trình biên dịch borland C? Nếu vậy bạn có thể thử giảm vùng tiếp xúc giữa ứng dụng và thư viện. –

Trả lời

6

Viết một DLL sử dụng Visual C++ đó cho thấy nhiều giao diện của nó như các chức năng của Windows stdcall C. Các hàm Windows API cũng được thực hiện tương tự. Những chức năng mà bạn trưng ra trong giao diện sẽ thực hiện các chức năng bạn cần để thay thế trong chương trình của bạn. Bên trong DLL, gọi thư viện MS VC++ mới với từ bỏ.

Vì vậy, để có được một chức năng đó là callable từ C và sử dụng stdcall ngăn xếp giao thức làm một cái gì đó như thế này:

extern "C" int __stdcall foo();

bạn cũng sẽ có thêm thông tin để xuất khẩu chức năng từ DLL. Bạn có thể làm điều này một cách rõ ràng trong tuyên bố như vậy:

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

Nhưng bạn sẽ cần một file riêng để sử dụng trong mã BorlandC của bạn (mà có lẽ có cú pháp khác nhau để xác định phần nhập khẩu DLL và stdcall phần). Trong Visual C++ khai báo bạn muốn sử dụng trong các khách hàng sẽ giống như thế:

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

2

Bạn có thể tạo Borland OMF libaries nhập khẩu với tiện ích IMPLIB Borland: IMPLIB -a "whatever.omf" "whatever.dll ", nơi tệp DLL được tạo bởi MSVC.

Tùy chọn -a dành cho khả năng tương thích của Microsoft. OMF được tạo ra (định dạng tệp thư viện nhập của Borland), kết hợp với một tệp tiêu đề xác định các hàm đã xuất và quy ước gọi của chúng (s) sẽ hoạt động ... (Tôi tin IMPLIB là trong C++ Builder 5.)

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

Các vấn đề liên quan