AccessTr.neT

Tam Versiyon: Bilgisayar Satış Takip 3 Lü Resim Eklemeli
Şu anda arşiv modunu görüntülemektesiniz. Tam versiyonu görüntülemek için buraya tıklayınız.
bilgisayar satışı yapan küçük işletmelerin kullanabilecegi 3 adet resim eklemeli alış faturası satış faturası ayrı ayrı klasörlere kayıt yapma imkanı kullanacak arkadaşlara hayırlı olsun
Elinize sağlık Sayın @simendifer, teşekkür ederiz.
Sayın @simendifer kullanışlı güzel bir çalışma olmuş. Yalnız açarken macro sorunları ile karşılaştım. Microsoft 365 Office ve İşletim sistemi ise Win 10 Pro 64 Bit kullanıyorum. İlgili macroların tamamlanması gereken bölümlerine "PtrSafe" ibaresini ekledikten sonra programı çalıştırabildim. Acaba 32 Bit 64 Bit uyuşmazlığı mı sorun oldu. Program 32 Bit için mi hazırlandı. Acaba hem 32 hem de 64 bit sistemlerde çalışacak şekilde revize edilebilir mi? Yoksa benim program üzerinde açılışta aldığım uyarı ben de mi yaptı acaba? Emeğiniz için teşekkür ederim.
sayın yyhy
Modüllerdeki apideclaration satırlarında PTRSA FE deyimini kullanmalısınız. Hem 32 hem de 64 bit'te çalışması için mesela aşağıdaki biçimde olan kodları

Visual Basic Code
PrivateDeclareFunctionapiShowWindowLib"user32"Alias"ShowWindow"(ByValhwndAsLong,ByValnCmdShowAsLong)AsLong
şu şekilde değiştirin:
Visual Basic Code
#If VBA7 Then
PrivateDeclarePtrSafeFunctionapiShowWindowLib"user32"Alias"ShowWindow"(ByValhwndAsLong,ByValnCmdShowAsLong)AsLong
#Else
PrivateDeclareFunctionapiShowWindowLib"user32"Alias"ShowWindow"(ByValhwndAsLong,ByValnCmdShowAsLong)AsLong
#EndIf
Böylece 32 bit için de 64 bit içim de sorun ortadan kalkar.

Bunu eklemeniz gerektiğini nereden mi anlayacaksınız?
Modüllerde "privatedeclare" 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üldeDeclareFunction biçimi başında "private" olmadan kullanıldıysa o zaman da yine ptrsa FEdeyiminideclare komutundan hemen sonra kullanmalısınız. Bir örnek vereyim:

kodumuz şöyle olsun
Visual Basic Code
DeclareFunctionLoadCursorBynumLib"user32"Alias"LoadCursorA" _
(ByValhInstanceAsLong,ByVallpCursorNameAsLong)AsLong
Bu durumda ptrsa FE nereye gelecek? Privatedeclare'de hemen declare'den sonra kullanmıştık. Burada da aynı şekilde
Visual Basic Code
#If VBA7 Then
DeclarePtrSafeFunctionLoadCursorBynumLib"user32"Alias"LoadCursorA" _
(ByValhInstanceAsLong,ByVallpCursorNameAsLong)AsLong
#Else
DeclareFunctionLoadCursorBynumLib"user32"Alias"LoadCursorA" _
(ByValhInstanceAsLong,ByVallpCursorNameAsLong)AsLong
#EndIf

Sonuçta her iki kullanımda da unutmamanız gereken şey ptrsafe'yideclare sözcüğünden sonra kullanmak.
Alıntı:...32 bit / 64 bit kullanımlarında,

declare edilen fonksiyon tanımlarında eğer LONG ifadesi geçiyorsa;bunları da LONGPTR olarak değiştirmek gerekecektir...
Emeğine sağlık