Skip to main content

AccessTr.neT


32 bit (x86) yapılan programların 64 bit (x64) çalıştırılması

32 bit (x86) yapılan programların 64 bit (x64) çalıştırılması

#25
(26/11/2013, 11:18)mehmetdemiral yazdı: Modüllerdeki api declaration satırlarında PTRSAFE deyimini kullanmalısınız. Hem 32 hem de 64 bit'te çalışması için mesela aşağıdaki biçimde olan kodları

Private Declare Function apiShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

şu şekilde değiştirin:

#If VBA7 Then
   Private Declare PtrSafe Function apiShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
#Else
    Private Declare Function apiShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
#End If
Böylece 32 bit için de 64 bit içinm de sorun ortadan kalkar.

Bunu eklemeniz gerektiğini nereden mi anlayacaksınız?
Modüllerde "private declare" ile başlayan kodlarda api kullanıldığı için 64 bit için sorun çıkar. Çünkü iki işletim sisteminde kullanılan api mantığı farklıdır. 32 bitlik işletim sisteminde kullanılan kodları yukarda verdiğim biçime dönüştürdüğünüzde her iki sistemde de sorunsuz çalışacaktır.

Bir uyarı: Eğer modülde Declare Function biçimi başında "private" olmadan kullanıldıysa o zaman da yine ptrsafe deyimini declare komutundan hemen sonra kullanmalısınız. Bir örnek vereyim:

kodumuz şöyle olsun

Declare Function LoadCursorBynum Lib "user32" Alias "LoadCursorA" _
 (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long
Bu durumda ptrsafe nereye gelecek? Private declare'de hemen declare'den sonra kullanmıştık. Burada da aynı şekilde

#If VBA7 Then
   Declare PtrSafe Function LoadCursorBynum Lib "user32" Alias "LoadCursorA" _
 (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long
#Else
   Declare Function LoadCursorBynum Lib "user32" Alias "LoadCursorA" _
 (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long
#End If

Sonuçta her iki kullanımda da unutmamamanız gereken şey ptrsafe'yi declare sözcüğünden sonra kullanmak.

Hocam Özür dilerim ama kusura bakmayın beceremedim zaten o kadarını becere bilseydim sizden yardım istemezdim veya kendi programımı kendim yapardım ama yine de saolun çalışmalarınızda başarılar dilerim....
Cevapla
#26
(26/11/2013, 11:18)mehmetdemiral yazdı: Modüllerdeki api declaration satırlarında PTRSAFE deyimini kullanmalısınız. Hem 32 hem de 64 bit'te çalışması için mesela aşağıdaki biçimde olan kodları

Private Declare Function apiShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

şu şekilde değiştirin:

#If VBA7 Then
   Private Declare PtrSafe Function apiShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
#Else
    Private Declare Function apiShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
#End If
Böylece 32 bit için de 64 bit içinm de sorun ortadan kalkar.

Bunu eklemeniz gerektiğini nereden mi anlayacaksınız?
Modüllerde "private declare" ile başlayan kodlarda api kullanıldığı için 64 bit için sorun çıkar. Çünkü iki işletim sisteminde kullanılan api mantığı farklıdır. 32 bitlik işletim sisteminde kullanılan kodları yukarda verdiğim biçime dönüştürdüğünüzde her iki sistemde de sorunsuz çalışacaktır.

Bir uyarı: Eğer modülde Declare Function biçimi başında "private" olmadan kullanıldıysa o zaman da yine ptrsafe deyimini declare komutundan hemen sonra kullanmalısınız. Bir örnek vereyim:

kodumuz şöyle olsun

Declare Function LoadCursorBynum Lib "user32" Alias "LoadCursorA" _
 (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long
Bu durumda ptrsafe nereye gelecek? Private declare'de hemen declare'den sonra kullanmıştık. Burada da aynı şekilde

#If VBA7 Then
   Declare PtrSafe Function LoadCursorBynum Lib "user32" Alias "LoadCursorA" _
 (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long
#Else
   Declare Function LoadCursorBynum Lib "user32" Alias "LoadCursorA" _
 (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long
#End If

Sonuçta her iki kullanımda da unutmamamanız gereken şey ptrsafe'yi declare sözcüğünden sonra kullanmak.

Hocam Özür dilerim ama kusura bakmayın beceremedim zaten o kadarını becere bilseydim sizden yardım istemezdim veya kendi programımı kendim yapardım ama yine de saolun çalışmalarınızda başarılar dilerim....
Cevapla
#27
TEŞEKKÜR EDERİM ELLERİNE, BEYNİNE SAĞLIK. ÇALIŞMAYAN PROGRAMI ÇALIŞTIRDIM.
Cevapla
#28
(24/01/2018, 14:16)ugurarslan yazdı:
(18/01/2018, 15:04)C*e*l*o*y*c*e yazdı: Modülleri kontrol edin

Hocam merhabalar, 
biz başka birinin 32 bit acceste yazmış olduğu hazır maaş programı kullanıyoruz. Office 2016 64 bit lisanslı ürüne geçmek istememiz nediyle program 64 bitte hata vermektedir. Yukarıda belirtilen kodları accessin veya programın hangi sütununa, dizininde düzeltme yapacağımızı belirtirseniz sorunumuz çözülecektir. İsterseniz programın linkini de sizinle paylaşabiliriz(e-posta aracılıgı ile). Geniş bahis seçenekleri ve kullanıcı dostu arayüzüyle Türkiye'de güvenilir bir çevrimiçi bahis platformu olarak öne çıkıyor. Spor bahislerinden canlı casinoya kadar çeşitli oyun seçenekleri sunan 1xbet giriş  kullanıcılarına keyifli bir deneyim vadediyor. Ayrıca, mobil uygulaması sayesinde dilediğiniz her yerden kolayca erişim sağlayabilirsiniz. Bahis dünyasında güvenilir bir platform arıyorsanız, 1xBet'i kesinlikle tavsiye ederim.

Evet, buna katılmamak elde değil.
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da
Task