2011-01-04 28 views
7

Eski Borland Derleyici (BC 5) kullanarak C ile yazılmış eski bir uygulamayı desteklemeliyim.Eski Borland C'de bir Visual C++ DLL kullanma?

Maalesef kullandığımız eski TCP/IP kitaplığı, yaşını göstermeye başlıyor ve Vista & Win7 makinelerinde sorun yaşıyor.

Ben ++ MS Visual C adet fonksiyon yeni bir kütüphane var ve ben Yani Borland C

çağrılabilir olacak bir DLL yapmak için bu kullanmak istiyorum, ben 2 sorunları var: 1) Bir Borland C programından kalınabilir bir Visual C++ DLL nasıl yapılır ve 2) callable ise, C++ eski düz C'den nasıl çağrılır?

İdeal olarak, tüm proje Visual C'ye dönüştürülmeli, ancak bu projeyi büyük bir taahhüt haline getirecek birçok eski özellik var! Windows STDCALL C fonksiyonları olarak arayüz içeren Visual C++ kullanarak bir DLL yaz bir süre daha uzun :)

Steve

+0

Borland C derleyiciniz hala var mı? Eğer öyleyse, uygulama ve kütüphane arasındaki iletişim alanını azaltmayı deneyebilirsiniz. –

cevap

6

süre hayatta tutmak için hızlı bir yama arıyorum. Windows API işlevleri benzer şekilde yapılır. Arayüzde ortaya çıkardığınız fonksiyonlar, programınızda değiştirmeniz gereken fonksiyonları yerine getirecektir. DLL içinde, yeni MS VC++ kütüphanesini terk ederek çağırın. Ayrıca DLL işlevi dışa bilgi eklemek gerekecek

extern "C" int __stdcall foo();

:

Yani C çağrılabilir ve STDCALL yığını protokol böyle bir şey yapmak kullanan bir işlevi alır.

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

Ama muhtemelen DLL alma bölümünü ve STDCALL belirtmek için farklı sözdizimi vardır senin BorlandC kodunda kullanılmak üzere ayrı bir başlık dosyası (gerekir: Aşağıdaki gibi bildiriminde açıkça bu yapabilir Bölüm).

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

2
Sen Borland IMPLIB yardımcı programı ile Borland SMÇ ithalat kütüphanelerine oluşturabilir

: IMPLIB -a "whatever.omf" "whatever.dll Visual C++ istemci kullanacağınız beyan benzer görünümde olacaktır "DLL dosyasının MSVC tarafından oluşturulduğu yer.

-a seçeneği Microsoft uyumluluğu içindir. Dışa aktarılan işlevleri ve çağrı çağrılarını belirten bir başlık dosyasıyla birlikte oluşturulan OMF (Borland'ın içe aktarım kitaplığı dosya formatı), çalışmalıdır ... (IMPLIB'nin C++ Builder'da bulunduğuna inanıyorum.)

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