PDA

View Full Version : سوال: تبدیل API های تعریف شده در C++ به VB



Mr'Jamshidy
سه شنبه 13 اردیبهشت 1390, 16:07 عصر
سلام

من امروز رفتم تو سایت Microsoft که از API های جدید در ویندوز سون مطلع بشم که متاسفانه اکثر API ها به زبان C++ درج شده بود

از اونجایی که من C++ بلد نیستم دیگه دست به دامن شما شدم

_behnam_
سه شنبه 13 اردیبهشت 1390, 21:46 عصر
منوی Add-Ins روی گذینه Add-In Manager کلیک کنید از پنجره جدید VB 6 API Viewer رو انتخاب کنید و تیک Loaded\Unloaded و Load on Startup v بزنید و بعد Ok
حالا از Add-Ins \ API Viewer در پنجره جدید File \ Load Text File فایل WIN32API.TXT رو لود کنید

returnx
سه شنبه 13 اردیبهشت 1390, 22:34 عصر
منوی Add-Ins روی گذینه Add-In Manager کلیک کنید از پنجره جدید VB 6 API Viewer رو انتخاب کنید و تیک Loaded\Unloaded و Load on Startup v بزنید و بعد Ok
حالا از Add-Ins \ API Viewer در پنجره جدید File \ Load Text File فایل WIN32API.TXT رو لود کنید
ایشون گفتن API های جدید...
اون API هایی که تو اون فایل نوشته شده برای سال 1998 هست...

ali.rezaei7
چهارشنبه 14 اردیبهشت 1390, 01:36 صبح
سلام

من امروز رفتم تو سایت Microsoft که از API های جدید در ویندوز سون مطلع بشم که متاسفانه اکثر API ها به زبان C++ درج شده بود

از اونجایی که من C++ بلد نیستم دیگه دست به دامن شما شدم

سلام.
متاسفانه تنها راهش این هست که خودتون تابع رو بصورت دستی به Syntax وی بی تبدیل کنید. برای اینکار باید سینتکس ++c و ساختار توابع api آشنا باشید.
اول باید با ساختار api در وی بی و نجوه تعریف اون رو بلد باشید:
Private Declare Function FunctionName Lib "LibraryName" [Alias "AliasName"](parameters) As DataType

FunctionName : نام تابع؛ مثلا RegSetValueEx
LibraryName: نام فایل کتابخانه ای که تابع عضوی از آن است برای RegSetValueEx میشه advapi32.dll
Alias: میشه گفت نسخه کارکتری تابع رو مشخص می کنه، که در دو حالت unicode و ansi می باشد. برای ست کردن این مقدار فقط کافی هستش که کارکتر W رو برای unicode و A رو برای ansi به انتهای نام تابع اضافه کنید. مثل RegSetValueExA . در مورد توابعی که حالت unicode ندارند نام تابع رو می نوسیم.
parameters و datatype: اینجاست که نیاز میشه که با ++c آشنا باشد.
چند نمونه تبدیل datatype از vcpp به vb رو براتون می زارم:
DWORD=Long
LPCTSTR=String

این ساختار تابع RegSetValueEx در MSDN هستش:
LONG WINAPI RegSetValueEx( __in HKEY hKey, __in_opt LPCTSTR lpValueName, __reserved DWORD Reserved, __in DWORD dwType, __in_opt const BYTE *lpData, __in DWORD cbData );

در cpp برای تعریف متغییر اول نوع رو می نویسن و بعد نام رو. نوع خروجی تابع رو هم قبل از نام تابع قرار میدن. اگر هم علامت ستاره بعد از نام پارامتر دیدین،بدین معنا هست که اون یک pointer هست و آرگومان رو بصورت byval باید ارسال کنید(در هنگام فراخوانی).
البته اون چیزی که تو MSND از ADT توابع می بینید، ++c محض نیست. بیشتر مثل یک شبه کد هستش.
برای بدست آوردن نام فایل کتابخانه و Alias تابع، می تونید از خود msdn کمک بگیرد. این اطلاعات رو در انتهای توضیحات هر تابع قرار داده.

الان دیگه باید بتونید که اینو به سینتکس وی بی تبدیل کنید.

Mr'Jamshidy
چهارشنبه 14 اردیبهشت 1390, 12:13 عصر
خوب حالا من اولین تابع رو تبدیل کردم اگر درسته که خدا رو شکر و اگر هم اشتباه داره که دیگه باز زحمتش میفته گردن شما که ایرادام رو بگیری


WINAPI HwndRenderTargetProperties(
__in HWND hwnd,
__in D2D1_SIZE_U pixelSize = D2D1::Size(static_cast<UINT>(0), static_cast<UINT>(0)) ,
__in D2D1_PRESENT_OPTIONS presentOptions = D2D1_PRESENT_OPTIONS_NONE
);



Declare Sub HwndRenderTargetProperties Lib "D2d1.dll" (hwnd As Long,pixelSize As D2D1_SIZE_U , presentOptions As D2D1_PRESENT_OPTIONS)

ali.rezaei7
چهارشنبه 14 اردیبهشت 1390, 15:20 عصر
خوب حالا من اولین تابع رو تبدیل کردم اگر درسته که خدا رو شکر و اگر هم اشتباه داره که دیگه باز زحمتش میفته گردن شما که ایرادام رو بگیری


WINAPI HwndRenderTargetProperties(
__in HWND hwnd,
__in D2D1_SIZE_U pixelSize = D2D1::Size(static_cast<UINT>(0), static_cast<UINT>(0)) ,
__in D2D1_PRESENT_OPTIONS presentOptions = D2D1_PRESENT_OPTIONS_NONE
);



Declare Sub HwndRenderTargetProperties Lib "D2d1.dll" (hwnd As Long,pixelSize As D2D1_SIZE_U , presentOptions As D2D1_PRESENT_OPTIONS)


این تابع زیر مجموعه ای از توابع Direct2D ویندوز، می باشد که امکان برنامه نویسی DirectX رو برای ویندوزهای 7 و ویستا رو فراهم می کنه و با توجه به ساختار آن، تنها در ++c قابل پیاده سازی می باشد. البته نسخه ای از این مجموعه در پکیجی بنام Windows API Code Pack for Microsoft .NET Framework (http://archive.msdn.microsoft.com/WindowsAPICodePack) برای دات نت قرار داده ده است.
درکل این توابع سازگار با ویندوزهای مدرن مایکروسافت است و از طریق وی بی 6 نمی شه پیاده سازی کردش.

Mr'Jamshidy
چهارشنبه 14 اردیبهشت 1390, 19:57 عصر
خوب پس حالا باز این سوال پیش میاد که این موضوع رو چطور میشه تشخیص داد که VB6 قدرت پردازش یک API رو داره یا نه (البته بدون امتحان کردن)

پس اینطور که شما گفتی توی تبدیل من ایرادی وجود نداشت؟

باز هم ممنون