2009-03-02 31 views
4

Bu yalnızca bir yarım yol programlama sorusudur. Her şeyden önce bir PCI-Express kart ve 32/64 bit sürücüleri var. Hedef işletim sistemi bir Windows 64 bit sistemi olmalıdır. Vista64 altında tüm sürücülerin 64 bit sürücü sertifikasına sahip olması gerektiğini okudum. Bu, 64 bit işletim sistemlerinde genel bir kısıtlama mıdır ve bu "XP 64" veya herhangi bir Linux sistemi için de geçerli midir?Bir 32 bit programında 64 bit sürücü kullanılması. Windows

Basitlik için, Vista64 altında PCIe kartım için 64 bitlik bir sürücü kullandığımı ve kartların işlevselliğini kullanmak için bir grup 64 bit DLL kullandığımı varsayalım. Diğer tarafta, PCIe cihazını kullanması gereken büyük, eski bir 32 bit exe programı var. Programı 64 bit'e çevirmek gerçekten çok büyük bir çaba olacaktır.

Bu 32 bit programı ve 64 bit sürücüyü bir araya getirmek için ne yapılabilir? 32/64 bit ikili dosyaları ve DLL'leri karıştırmanın mümkün olmadığını okudum ama bu bana inanmak zor. Eminim Vista64 altında bir belgeyi bir 32 bit uygulama içinden yazdırabilirsiniz ve Windows bir şekilde 64 bitlik bir yazıcı sürücüsüne sarılacaktır.

cevap

3

64 bit sertifikasyon yalnızca Vista altında gereklidir; Windows olmayan platformlar için bir onaylama otoritesi yoktur ve XP veya Windows Server'ın sertifikasyonu denetlediğine inanmıyorum (emin olmamanız ve hangi hizmet paketine bağlı olduğunuza bağlı olabilir).

Sürücüyü Windows API üzerinden kullanıyorsanız, herhangi bir sorun olmamalıdır; Windows çekirdekte 32 < -> 64 bit çevirileri yapacaktır. Sürücüyü kendi işleminize yüklemeye çalışıyorsanız, bu muhtemelen mümkün olmayacaktır. Dirk'in söylediği gibi, kendi süreci içinde çalıştırmanız ve bir COM sunucusu aracılığıyla iletişim kurmanız gerekecek. Sürücünüzü daha yüksek ayrıcalık yürütme düzeyinde çalıştırmanız ve kullanıcı modundan arama yapmak istediğinizde atlamak için hangi çemberin atlayacağından emin değilim.

Umarım, 64 bitlik DLL'ler 32 bitlik bir API sunar veya Windows standart bir sürücü arabirimi sunar (bir ekran veya ağ kartı gibi yaygın bir G/Ç aygıtıysa).

+0

Sürücüyü doğrudan kullanmam ancak bir dizi DLL'de kullanmıyorum. Standart bir aygıt olmadığı için DLL'lerin bir 32 bit API'sı olmadığı için 64 bitlik bir exe kullanmam gerekiyor. – asdrubael

1

Bir sürücünün bütününün, aslında donanımın gerçekten çalışmasını soyutlamak ve yazılıma ortak bir arayüz sunmak olduğunu düşünüyorum. Bu durumda, PCIe sürücüsünün 64-bit olması gerekir, böylece Windows ve donanım arasında bir geçiş gibi davranabilir, ancak 32-bit bir uygulamanın herhangi bir sorun olmadan cihaza erişebileceğini düşünürdüm. hakkında bilgi edinmenizi de uyumsuzluk kast Neler

32 ve 64-bit montajları aynı uygulamanın parçası olamaz ki - Bir uygulama ya birini ya da diğer hedef alır, 32-bit uygulama olacak genellikle olsa Sadece bir çevirmen olarak davranan WoW64 kullanarak Windows x64 üzerinde iyi çalışır.

Şu anda sorun yaşıyor musunuz, yoksa yalnızca varsayımsal olarak mı soruyorsunuz?

+0

Şimdilik sadece varsayımsal olarak soruyorum ama umarım yarın denemeyi umarım. – asdrubael

3

32 bit uygulamanız doğrudan sürücüyü mi çağırıyor? (Sürücü için bir simülatör tahmin ediyorum!)

32-bit ve 64-bit dlls arasında iletişim kurmanın tek yolu, iletişimi yöneten bir COM sunucusu yazmaktır (read: uygulama çağrılarını YA DA Arasındaki 64-bit sürücü yanıtları).

Beni ısırmak için geri gelen bir şey: Bu COM sunucusunu ilk yazdığımda (evet, bu hileyi bilmeden önce pek çok uykusuz geceye katlanmak zorunda kaldım) Sadece 32-bit versiyonunu oluşturdum. (otomatik oluşturulan) proxy/saplama dll. Çözümü bilmeden bir başka uykusuz geceler ortaya çıktı: 32-bit ve 64-bit için proxy/stub dll oluşturun. 32-bit taraf, 32-bit tarafıyla (sizin uygulamanızda) ve 64-bit tarafıyla (sürücü) 64-bit ilgilenir. COM, proxy/saplamanın farklı sürümlerinin birbiriyle nasıl konuştuğunu yönetir. Ve oh, sunucuyu sisteminize kaydettirin. Kolay değil mi?

İlgili konular