AccessTr.neT
32 bit (x86) yapılan programların 64 bit (x64) çalıştırılması - Baskı Önizleme

+- AccessTr.neT (https://accesstr.net)
+-- Forum: Microsoft Access (https://accesstr.net/forum-microsoft-access.html)
+--- Forum: Access Cevaplanmış Soruları (https://accesstr.net/forum-access-cevaplanmis-sorulari.html)
+--- Konu Başlığı: 32 bit (x86) yapılan programların 64 bit (x64) çalıştırılması (/konu-32-bit-x86-yapilan-programlarin-64-bit-x64-calistirilmasi.html)

Sayfalar: 1 2 3 4 5


32 bit (x86) yapılan programların 64 bit (x64) çalıştırılması - mesutyagmur - 26/11/2013

Merhaba Arkadaşlar

32 bit te yaptığım bir çalışmayı 64bit te çalıştıramadım. Ne yapmam gerekiyor?


Cvp: 32 bit (x86) yapılan programların 64 bit (x64) çalıştırılması - mehmetdemiral - 26/11/2013

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.


Cvp: 32 bit (x86) yapılan programların 64 bit (x64) çalıştırılması - yorum70 - 26/11/2013

olay budur yani, bu sra 64 bit sorunu cok karsima cikiyor, bu ornekte mukemmel anlatilmis.tsk,


Cvp: 32 bit (x86) yapılan programların 64 bit (x64) çalıştırılması - mehmetdemiral - 18/07/2014

Şimdi farkettim de 26-11-2013, 10:21'de sorulan bir soruya tam çözüm olarak 26-11-2013, 11:18'de yanıt veriyorum, vatandaş geri dönüp yanıt yazma zahmetinde bile bulunmuyor. Bu arkadaştan lütfen bu sorunun cevabı olarak taahhüt ettiği bedeli tahsil edelim Img-grin

Microsoft'a avuç dolusu dolar verip aldığımız(!) ofis 2013 için hata bildirimi yapıyoruz adamlarda pire uçuşuyor. Bir microsoftçu bu yazıyı görür de inşallah yazar buralara. Mübarek ayda duamız kabul olur inşallah Img-grin Microsoft-ül Deccal Img-grin


Cvp: 32 bit (x86) yapılan programların 64 bit (x64) çalıştırılması - malt - 18/02/2015

Teşekkür ederim, ben de yararlandım ve sorunumu çözdüm.


Cvp: 32 bit (x86) yapılan programların 64 bit (x64) çalıştırılması - mehmetdemiral - 19/02/2015

Bir de Mesut Yağmur yazaydı Img-grin