PDA

View Full Version : سوال: delegate، event در سی پلاس و فراخوانی آن با c#



MadCode
سه شنبه 05 شهریور 1392, 17:18 عصر
سلام خدمت اساتید محترم .

من سوکتی با سی + + نوشتم که حالا مقادیر و رسیو سوکت یا ارسال رشته به سوکت از سی شارپ مشکل ندارم.


[DllImport("socket.dll")]
public static extern string socket_test();
در سی ++
extern "C" __declspec(dllexport) wchar_t * socket_test()
{
// dastorha
}

من از یک حلقه وایل برای فراخوانی مقادیر بازگشتی socket_test() در صورت تغییر کردن استفاده کردم.

این عمل درست کار میکنه مشکلی هم نداره ولی من می خوام به صورت Event مقادیر وقتی تغییر کردن از c ++ به سی شارپ انتقال داده بشه . مثل این قطعه کد در سی شارپ:

public delegate void onTest(string str);
public event onTest _onTestEvent;
protected void onTestEvent(string str)
{
if (_onTestEvent != null)
{
onTestEvent(str);
}
}

لطفا اگر امکانش هست کمک کنید.
با تشکر.

UfnCod3r
سه شنبه 05 شهریور 1392, 17:31 عصر
event رو که کاریش نمیشه کرد ولی delegate ها مثل همون اشاره گر به تابع هستن ی همچین چیزایی باید بنویسی

///////////////C++
void (*FPROC_Listenear)(int);

FPROC_Listenear gListener = nullptr;

extern "C" __declspec(dllexport) void AttachLitener(FPROC_Listenear listenear)
{
gListener = listenear;
}




///////////////////C#
public delegate void DListener(int);

[DllImport("mydll.dll")]
public static extern void AttachLitener(DListener listener);


درضمن می تونی رویداد ها رو تو ی صفی ذخیره کنی و ی تابع درست کنی که از اون صف رویداد رو برداره و توی سی شارپ ازش استفاده کنی.
:متفکر:

MadCode
پنج شنبه 07 شهریور 1392, 22:38 عصر
اگر امکانش هست لطفا که یک مثال برای فراخوانی delegate c++ extern از طریق c# بزنید.

با تشکر.