سلام ففق یک تایپک در مورد dll زده است من برام سوالی پیش اومده که چطور می شه یک dll به زبان C++ نوشت و آن را برای استفاده برای سی شارپ تبدیل کرد و این که برای اطلاع بیشتر یک توضیح در مورد این که DLL چیست ؟؟ (برای دوستان)
DLL یک نوع فایل اجرایی یه که معمولا مستقیما اجرا نمیشه، داخلش یکسری توابع و روتین هایی نوشته میشه که سایر
برنامه ها فراخوانی شون می کنند، یعنی DLL یک کتابخانه یا مجموعه ای از توابع و روتین ها است. توابع و روتین هایی
که در DLL هستند فرق زیادی با اونهایی که در EXE ها هستند ندارند، صرفا در DLL این توابع برای استفاده سایر برنامه ها
Export می شوند، یعنی اسم شون در یک لیست ثبت میشه که سایر برنامه ها با اشاره به اون اسم تابع مورد نظر
رو فراخوانی می کنند. اگر تابعی Export نشه در خود DLL قابل استفاده است، اما سایر برنامه ها نمی توانند ازش
استفاده نمایند.
ساختن DLL با 6.0 ++Microsoft Visual C (جزئی از Microsoft Visual Studio 6) خیلی راحته، یک New Project
از نوع Win32 Dynamic-Link Library می سازید که فایل cpp اصلی اش مثلا اینه :
کد:
[COLOR="Gray"]#include "stdafx.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}[/COLOR]
بعد تابع یا توابع و روتین های دلخواه تان را داخلش اضافه می کنید، مثلا تابع CompareInt که دو عدد 32 بیتی را
با هم مقایسه کند :
کد:
BOOL APIENTRY [B]CompareInt[/B]( DWORD x, DWORD y)
{
return (x < y);
}
بعد یک فایل جدید (Add Files To Folder) به پوشه Source Codes اضافه خواهید کرد که پسوند اش def است
و اسم توابع و روتین هایی که باید Export شوند را داخلش می نویسید ،YourLibraryName اسم کتابخانه شما
خواهد بود :
کد:
LIBRARY [B]YourLibraryName[/B]
EXPORTS
[B]CompareInt[/B]
اسم سایر توابع را هم در انتهای همین فایل اضافه خواهید کرد.
زمانی که این پروژه را Build کنید (کلید F7) فایل DLL در پوشه Debug ساخته می شود.
SampleDLL.zip
حالا این فایل DLL را در پوشه bin\Debug پروژه #C تان یا System32 ویندوز تان کپی خواهید کرد. کد زیر در زبان #C
تابع CompareInt را از داخل فایل DLL برای استفاده در برنامه تعریف می کند :
کد:
[System.Runtime.InteropServices.DllImport("SampleDLL.dll")]
private static extern bool CompareInt(int x, int y);
مثلا :
کد:
bool result = CompareInt(1, 2);
کد:
bool result = CompareInt(3, 0);
SampleDLLForCSharp.zip