PDA

View Full Version : حرفه ای: حل مشکل ماژول ها در 64 و 32 بیتی



amir91
شنبه 22 فروردین 1394, 14:23 عصر
با سلام خدمت اساتید و دوستان عزیز
من یک فایل دارم که از ماژول های این سایت استفاده کرده ام و در سیستم 32 بیتی بدون هیچ مشکلی جواب می دهد ولی در سیستم 64 بیتی به متن ماژول ها ایراد می گیرد
مثل:
Declare Function SetClassLong Lib "user32" Alias "SetClassLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
برای حل این مشکل راه حلی وجود دارد که فایل هم در سیستم 32 بیتی و هم در 64 بیتی جواب دهد
با تشکر

AbbasSediqi
شنبه 22 فروردین 1394, 19:54 عصر
برادر بعد از declare باید اثن رو اضافه کنی ptrsafe

Abbas Amiri
شنبه 22 فروردین 1394, 21:25 عصر
سلام
سعی کنید در برنامه هایتان جهت استفاده از رفرنسهای خارجی و استفاده از عبارت Declare از عبارات شرطی پیش پردازنده استفاده کنید.تا در سیستمهای 64بیتی به مشکل برنخورید
در مثال بالا:
#If Win64 Then
Declare PtrSafe Function SetClassLong Lib "user32" Alias "SetClassLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
#Else
Declare Function SetClassLong Lib "user32" Alias "SetClassLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
#End If

amir91
یک شنبه 30 فروردین 1394, 14:40 عصر
با سلام و تشکر
چون فایل من روی شبکه بود از راه حلی که دو فرمول 32 و 64 استفاده کردم و جواب داد .

G.hemati
چهارشنبه 14 مرداد 1394, 18:07 عصر
ممنون از پاسختون استاد امیری گرامی

من این شرط رو در استفاده کردم اما نمیدونم چرا خطا میگیره و بعد از قرار دادن PtrSafe بعد از Declare همون خط رو به رنگ قرمز در میاره

تصویر و کد استفاده شده را ضمیمه کردم ممنون میشم ملاحظه بفرمایین


If Win64 ThenPublic Declare PtrSafe Function ShowWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Else
Public Declare Function ShowWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
End If

mosaArabi
چهارشنبه 14 مرداد 1394, 18:56 عصر
سلام
دوست عزیز کلمه public را از سطر دوم و چهارم حذف کن
#If Win64 Then
Declare PtrSafe Function ShowWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
#Else
Declare Function ShowWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
#End If

G.hemati
چهارشنبه 14 مرداد 1394, 19:40 عصر
ممنون جناب عربی گرامی

ولی سطرهایی که با Public و حتی Declare شروع میشن هم همین شرایط رو دارن و به رنگ قرمز در میان

G.hemati
چهارشنبه 14 مرداد 1394, 19:43 عصر
چون فایل من روی شبکه بود از راه حلی که دو فرمول 32 و 64 استفاده کردم و جواب داد .

فایل من هم روی شبکه است . دوستمون از چه روشی استفاده کردن

amir91
پنج شنبه 15 مرداد 1394, 06:42 صبح
سلام دوست گرامی
دستوراتی که نوشتی درسته فقط
از علامت # قبل از if و else و end if استفاده کن مشکلت حل میشه

G.hemati
پنج شنبه 15 مرداد 1394, 08:15 صبح
با تشکر از دوست گرامی amir91
من گفته شما رو هم اجرا کردم ولی مشکل همچنان حل نشده

ممنون میشم یه نمونه از کارهای خودتون رو ضمیمه کنید

amir91
پنج شنبه 15 مرداد 1394, 09:11 صبح
#If Win64 Then
Private Declare PtrSafe Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
#Else
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
#End If
دستور بالا را در برنامه خود paste کن

Abbas Amiri
پنج شنبه 15 مرداد 1394, 12:11 عصر
ممنون از پاسختون استاد امیری گرامی

من این شرط رو در استفاده کردم اما نمیدونم چرا خطا میگیره و بعد از قرار دادن PtrSafe بعد از Declare همون خط رو به رنگ قرمز در میاره

تصویر و کد استفاده شده را ضمیمه کردم ممنون میشم ملاحظه بفرمایین


If Win64 ThenPublic Declare PtrSafe Function ShowWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Else
Public Declare Function ShowWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
End If




سلام

علت اینکه جملات دارای PtrSafe به رنگ قرمز میشوند اینست که در ورژن VBA مورد نظر تعریف نشده است و این هیچ مشکلی ایجاد نمی کند، چون در سیستم های 32 بیتی کامپایلر این قسمت را نمی خواند.

G.hemati
پنج شنبه 15 مرداد 1394, 12:33 عصر
با سپاس از شما استاد عزیز (به قول یکی از گزارشگران فوتبال " چقدر خوبین شما ") :قهقهه:

فقط اگه بیزحمت نقش علامت # اول IF و ٍElse رو بگین، ممنون میشم و اگه این علامت نباشه مشکلی پیش میاد

Abbas Amiri
پنج شنبه 15 مرداد 1394, 21:37 عصر
با سپاس از شما استاد عزیز (به قول یکی از گزارشگران فوتبال " چقدر خوبین شما ") :قهقهه:

فقط اگه بیزحمت نقش علامت # اول IF و ٍElse رو بگین، ممنون میشم و اگه این علامت نباشه مشکلی پیش میاد

سلام
علامت # مشخصه دستورات پیش پردازنده است که در VB کمتر استفاده میشود و مثلا در C بیشتر دیده می شود.
در مورد مثال خودمان زمانی که کامپایلر به دستور #If می رسد بسته به شرط یکی از گزینه ها را انتخاب می کند وآن را کامپایل می کند و از سایر خطوطی که در عبارات #If است صرف نظر میکند .
چنانچه از عبارات If مرسوم استفاده کنیم تمام جملات کامپایل خواهند شد.

meysam34797
چهارشنبه 13 مرداد 1395, 00:12 صبح
برادر بعد از declare باید اثن رو اضافه کنی ptrsafe

خیلی کارت درسته بهت ایمان آوردم دمت گرم با یه کلمه کارمو راه انداختی ایییییییییییییییییییول

Shahramdindoust
پنج شنبه 06 آذر 1399, 19:12 عصر
...................

parsa70
جمعه 07 آذر 1399, 16:18 عصر
سلام من از روش‌های پست ۲ و پست ۹ امتحان کردم درست نشد.
روش پست ۹ رو میرم موقع اجرای ماژول بالون این رو میگه؛
https://uupload.ir/files/1b5q_1_thumb.png (https://uupload.ir/view/1b5q_1.png)
روش پست ۲ هم کلاً ایرادی نمیگیره ولی ماژول اجرا نمیکنه
امکان هست فایل بزارم برام اصلاح کنید؟؟
یک سوال تو قسمت محیط vba منوی بالا tools و refrences کار خاصی نباید بکنم؟؟

sadegh1944
چهارشنبه 12 آذر 1399, 21:36 عصر
سلام، دوستان اگه در این باره توضیح بدهند که:
آیا اصلا نیاز هست که یک فایل اکسس محدود به نسخه 32 یا 64 بیتی بشه؟
و شاید به اجبار باید با توجه به نسخه ویندوز در برخی ماژولها از کدهای 32 یا 64 بیتی استفاده کرد؟