PDA

View Full Version : Dll و سؤال؟



abi_sarab
سه شنبه 15 اردیبهشت 1388, 13:08 عصر
سلام!
خوبید؟
فرض کنید من یه کامپوننتی دارم مثل button که مسلماً Dll هست.
وقتی اون رو توی پروژه اضافه می کنم این کامپوننت در پوشه Debug>bin می افته.
خوب حالا وقتی من برای این برنامه Setup می سازم و این برنامه رو در یک کامپیوتر دیگر نصب می کنم خوب مسلماً این کامپوننت یا Dll به همراه فایل Exe بر روی کامپیوتر نصب خواهد شد و طرف من به راحتی امکان استفاده از این کامپوننت رو داره و اون رو بر می داره و توی برنامه هاش استفاده می کنه و مسلماً اگر برنامه بدون اون کامپوننت نصب بشود کار نخواهد کرد.
حالا من چه طور می تونم کاری کنم که وقتی یه Dll می سازم کسی نتونه از این Dll استفاده کنه و اون رو توی برنامه اش Add کنه؟ کاری به این ندارم که سورسش رو باز کنه. نه می خوام کسی نتونه اون رو به برنامه اش Add کنه.
مرسی

tdkhakpur
سه شنبه 15 اردیبهشت 1388, 22:53 عصر
شما برای این کار توی همون dll که میسازید یه رمز برای بازگشایی که از طریق برنامه exe فرستاده میشه قرار بدید.

ahrimaneahurai
چهارشنبه 16 اردیبهشت 1388, 11:00 صبح
سلام دوستان . من یه برنامه نوشتم که از dll های teleriki توش استفاده کردم اما وقتی می برم توی یه کامپیوتر دیگه dll های telrik نمی رن و برنامه ران نمیشه. dll های telerik توی پوشه debug نمیان.خیلی گیج شدم
ممنون میشم کمک کنید.

abi_sarab
چهارشنبه 16 اردیبهشت 1388, 12:54 عصر
مرسی ولی چه طور باید رمز بنویسم؟
اگه نمونه کد داری بذار ممنون می شم!

abi_sarab
چهارشنبه 16 اردیبهشت 1388, 19:26 عصر
کسی نیست جواب بده؟

tdkhakpur
چهارشنبه 16 اردیبهشت 1388, 22:01 عصر
[quote=abi_sarab;717518]کسی نیست جواب بده؟[/quote
سلام:
شما از dll به چه عنوانی استفاده میکنید اگه توی dll یک تابع اصلی کار کذاشته اید میتونید این رمز رو بصورت آرگومان به تابع ارسال کنید.
باتوجه به اینکه در فراخوانی dll حتما از همین تابع ذکر شده در dll استفاده میکنید در همان نقطه فراخوانی برای اجرای dll آرگومان رمز شده رو نیز ارسال کنید.



------- dll ایجاد شده --------------------
extern "C" __declspec(dllexport) void MyDll(char *);
//---------------------------------------------------------------------------
voidType MyDll (char *Ramz)
{
//انجام عملیات شرط با رمز ارسالی بعد اجازه ورود در غیر اینصورت return;
}
------- فراخوانی dll ---------------------
void RunMyDll( char *DllFileName, char *Ramz)
{
HMODULE hmodule;
void (*MyDll)(char *);
hmodule = LoadLibrary(DllFileName);
if( hmodule == NULL) return RtnVal ;
MyDll = (void (*)(char *)) GetProcAddress(hmodule, "_MyDll");
if( MyDll == NULL ) { FreeLibrary(hmodule); return; }
(*MyDll)(Ramz);
FreeLibrary(hmodule);
}

لازم به توضیح ایت که این کد ها میتونن dll و کدهای متعلق به شما رو از دسترس نجات بدن.

hamid_200611
پنج شنبه 17 اردیبهشت 1388, 12:13 عصر
در مورد کنترل های telerik بگم که باید Dll کنترل های استفاده شده رو به صورت دستی از محل نصب ان به فایل debug یا Release اضافه کنی اون dll ها تو محل نصب telerik پوشه bin هست

hamid_200611
پنج شنبه 17 اردیبهشت 1388, 12:19 عصر
در مورد دوم اینه که یکی از ویرایش های xencode همین کارو انجام میده که این dll ها رو از دید کاربر مخفی می کنه.
روش دوم اینه که اون dll ها رو روی سیستم طرف با یه Sn کش کنی قبلا خودم تو یه تاپیک روش کش کردن dll رو گفتم.
این کش همون کاری که شرکت Telerikیا Devexpres انجام می ده که شما بعد از نصب اون اصلا dll نمی بینید ولی برنامه های که با اون کامپوننت نوشته شده اجرا می شه

qeidarlo
پنج شنبه 17 اردیبهشت 1388, 14:29 عصر
[quote=abi_sarab;717518]کسی نیست جواب بده؟[/quote
سلام:
شما از dll به چه عنوانی استفاده میکنید اگه توی dll یک تابع اصلی کار کذاشته اید میتونید این رمز رو بصورت آرگومان به تابع ارسال کنید.
باتوجه به اینکه در فراخوانی dll حتما از همین تابع ذکر شده در dll استفاده میکنید در همان نقطه فراخوانی برای اجرای dll آرگومان رمز شده رو نیز ارسال کنید.



------- dll ایجاد شده --------------------
extern "C" __declspec(dllexport) void MyDll(char *);
//---------------------------------------------------------------------------
voidType MyDll (char *Ramz)
{
//انجام عملیات شرط با رمز ارسالی بعد اجازه ورود در غیر اینصورت return;
}
------- فراخوانی dll ---------------------
void RunMyDll( char *DllFileName, char *Ramz)
{
HMODULE hmodule;
void (*MyDll)(char *);
hmodule = LoadLibrary(DllFileName);
if( hmodule == NULL) return RtnVal ;
MyDll = (void (*)(char *)) GetProcAddress(hmodule, "_MyDll");
if( MyDll == NULL ) { FreeLibrary(hmodule); return; }
(*MyDll)(Ramz);
FreeLibrary(hmodule);
}
لازم به توضیح ایت که این کد ها میتونن dll و کدهای متعلق به شما رو از دسترس نجات بدن.

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

tdkhakpur
جمعه 18 اردیبهشت 1388, 00:31 صبح
دوست عزیز برای راهنمائی احتیاج به توضیح زیادی داره .
شما اکه تونستید کد تابع موجود در فایل dll و نیز نحویه فراخوانی dll و تابع مربوطه رو ارسال کنید تا تغییرات لازم رو درش بدم.