PDA

View Full Version : فراخوان یک function



menevlster
شنبه 17 مهر 1389, 18:44 عصر
سلام من یک پروژه Win32 ایجاد کرده وکد زیر را به آن افزودم

__declspec(dllimport) void PutParam(int val);

void PutParam(int val){
//nothing
}
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}

سوال بنده اینست که در یک پروژه ی دیگر چگونه میتوان PutParam را صدا زد؟

tdkhakpur
یک شنبه 18 مهر 1389, 10:08 صبح
نوع پروژتون چی هست dll?
اگر dll هست نمونه زیر میتونه تابعی را که داخل dll قرار دارد را فرا بخواند.


HMODULE hmodule;
void (*PutParam)(int val);
hmodule = LoadLibrary(FileName);
if( hmodule != NULL){
PutParam = (void (*)(int)) GetProcAddress(hmodule, "PutParam");
if( PutParam!= NULL )
(*PutParam)(10);// مثلا
FreeLibrary(hmodule);
}

در ضمن تعریفی که برای ساخت انجام دادید به نظرم export نشه و کد زیر شاید سالمتر از کد شما باشه.


extern "C" __declspec(dllexport) void _stdcall PutParam(int val);

void PutParam(int val){

//nothing


}

menevlster
یک شنبه 18 مهر 1389, 23:26 عصر
دوست عزیز سلام.ممنون ازجوابتون.
من در ایجاد یک تابع روی یک dll. با dllexport وفراخوانی آن در یک پروژه دیگر مشکلی ندارم. مشکل من در ایجاد یک تابع روی یک exe. وفراخوانی آن در یک پروژه دیگر است واینکه آیا این امر امکانپذیر است یا نه.
و سوال دیگری که داشتم نحوه کاربرد dllimport در یک پروژه و چگونگی فراخوانی آن در یک پروژه دیگر است؟

r00tkit
یک شنبه 18 مهر 1389, 23:44 عصر
سلام

فراخوانی یه تابع از یه exe با loadlibrary امکان پذیر هستش( البته تا حالا دلیلی نبوده امتحانش کنم )


dllimport برای import کردن هستش یعنی چی فراخوانی در پروژهی دیگه

menevlster
دوشنبه 19 مهر 1389, 17:13 عصر
دوست عزیز سلام.ممنون ازجوابتون.
بگذار سوالم را به طور ساده تر بیان کنم:
من یک پروژه به نام server.exe ایجاد میکنم که یک تابع به نام PutParam درآن قرار دارد
حال در یک پروژه دیگر مثلا client.exe چگونه می توان تابع PutParam موجود در server.exe را فراخوانی کرد.البته با ("LoadLibrary("server.exe این کار امکانپذیر است ولی من می خواهم ابتدا server.exe را اجرا کرده و در حالت اجرا تابع PutParam را فراخوانی نمایم.
لطفا راهنمایی فرمایید.

r00tkit
دوشنبه 19 مهر 1389, 18:43 عصر
سوالت جالب هستش منتظر جواب باش

r00tkit
دوشنبه 19 مهر 1389, 19:53 عصر
بهتر نیست بری سراغ

corba یا .net remoting

menevlster
دوشنبه 19 مهر 1389, 20:38 عصر
فکر کنم منظور شما فراخوانی PutParam با ایجاد com interface در server.exe باشد ولی آیا استفاده از com interface تنها راه حل است؟
مثلا آیا با استفاده از ("CreateProcess("server.exe ویا ("GetModuleHandle("server.exe نمی توان PutParam را فراخوانی کرد؟

djsohrab2007
یک شنبه 06 شهریور 1390, 01:22 صبح
کسی نتونست جواب بده ؟

djsohrab2007
یک شنبه 06 شهریور 1390, 01:25 صبح
آقای menevlster (http://barnamenevis.org/member.php?89112-menevlster) اگر جواب سوال خود را پیدا کردید ، برای ما هم توضیح دهید، و یک کد نمونه برای همون مثالی که زدید ارائه کنید