با سلام خدمت شما
این فایل DLL را برای استفاده در برنامه ای است که به زبان MQL نوشتم و در برنامه Metatrader استفاده میشه .
dll باید تایتل Metatrader را بخونه و چک کنه که آیا عددی که در تایتل هست با عدد 434246 برابر هست یا نه.
اگه شما شماره Handle پنجره رو دریافت کنید، می توانید با استفاده از دستور GetWindowText عنوان پنجره (Title)
را دریافت کنید. طول رشته این عنوان (برحسب کاراکتر) هم توسط تابع GetWindowTextLength قابل دریافت کردنه.
در ادامه می توانید متن داخل این عنوان را به یک عدد تبدیل کنید (کاراکتر های غیر عددی داخل عنوان را نادیده بگیرید)،
و سپس با مقداری مثل 434246 مقایسه کنید.
در واقع شما موقع فراخوانی کردن تابع از داخل فایل DLL باید شماره پنجره را توسط یک پارامتر به تابع تحویل دهید.
در مثال زیر تابع MyFunction می تواند از داخل یک فایل DLL برای استفاده سایر برنامه ها Export شود.
این تابع پارامتر hWnd را که شماره Handle یک پنجره است دریافت می کند و اگر در عنوان آن پنجره عدد 434246
وجود داشت عدد 1 و در غیر اینصورت عدد 0 را به عنوان مقدار بازگشتی بر می گرداند :
کد:
int APIENTRY MyFunction(int hWnd)
{
int n = GetWindowTextLength((HWND)hWnd) + 1;
char* title = new char[n];
GetWindowText((HWND)hWnd, title, n);
int x = 434246, y = 0;
for (int i = 0; title[i]; i++)
{
if ((title[i] >= '0') && (title[i] <= '9'))
y = y * 10 + title[i] - '0';
else
{
if (y != 0)
break;
}
}
delete[] title;
return (x == y) ? 1 : 0;
}
در زبان ++Visual C عموما برای Export کردن توابع از داخل یک فایل DLL فایلی با پسوند def مثل export.def
به پروژه اضافه می کنند که یک فایل متنی است و متنی مشابه متن زیر در آن قرار دارد :
کد:
LIBRARY [B][COLOR="Blue"]DLLTitle[/COLOR][/B]
EXPORTS
[B][COLOR="Blue"]MyFunction[/COLOR][/B]
DLLTitle عنوان فایل DLL است که می تواند هر متن دلخواهی باشد.
MyFunction نام تابع یا متغیری است که باید Export شود و برای Export کردن چند تابع یا متغیر می تواند بجای
یک سطر چند سطر متوالی باشد.
موقع کامپایل کردن پروژه این فایل def بررسی شده و توابعی که اسم شان در آن وجود دارد در فایل DLL
Export خواهد شد.