PDA

View Full Version : سوال: مشکل توی show برای فرم



milad7091
شنبه 05 دی 1394, 17:38 عصر
با سلام.
دوستان من یک dll ساختم که توی این dll یک پروسیجری رو اجرا میکنم. اسم این پروسیجرو گذاشتم Start // تا اینجا رو داشته باشید!
توی یک برنامه جدید از این dll استفاده میکنم. و یک تایع مینویسم و میگم که بجای تابع توی dll این تابع رو اجرا کن(فایر کن). که فکر کنین اسمشو گذاشتم TEST.// تا اینجا رو هم داشته باشید!

الان مشکلم اینه, وقتی که DLL من میخواد پروسیجر Start رو فایر کنه. و خود Start هم در اصل داره تست رو اجرا میکنه, دستور Form.Show من کار میکنه. اما یک لحظه فرم رو نشون میده و بعد میبنده.

توی سایتی دیده بودم که نوشته بود Form.Show رو که نوشتی بعد بنویس Application.Run ولی این دستور درست کار میکنه. اما دیگه کارای اون فرم ثبلی متوقف میشه.

ممنونم اگه بگین من باید چیکار کنم واسه این موضوع.

Ananas
یک شنبه 06 دی 1394, 01:11 صبح
سلام.
به فرم parent بدید فکر میکنم حل بشه. چون من با dll فرم ساختم و show کردم. parent میدادم بهش. مشکلی نداشت. در حالت کنسول هم وقتی show اجرا میشد بدون parent برنامه قفل میشد. چون احتیاج به یک حلقه ی پیغام داشت. همچین چیزی:

while (true)
{
tagMSG msg;
ZeroMemory(&msg, sizeof(tagMSG));

int ift = false;
while (PeekMessage( &msg , 0 , 0 , 0 , PM_REMOVE ))
{

TranslateMessage( &msg );
DispatchMessage( &msg );
cout << msg.message << endl;
if ((msg.message == WM_QUIT))
{
//p->ShowWindow(200, 200);
PostQuitMessage(0);
ift = true;
break;
};

};
if (ift)
{
break;
}

};

milad7091
یک شنبه 06 دی 1394, 07:52 صبح
ممنو بابت پاسخ شما. اما فکر کنم من منظورمو بد گفتم.
من توی dll دارم یک پورتی رو شنود میکنم. زمانی از شبکه یک رشته دریافت کرد(که خودم واسش میفرستم) میام اونو برسی میکنم. که اگه اون رشته A1 بود پروسیجر Pr1 رو اجرا کن. درغیر این صورت پروسیجر Pr2 رو اجرا کن. تا اینجا که مشکلی نیست.
حالا من اومدم از توی برنامه به dll میگم به جای Pr1 بیا MainPr1 رو که دارم توی محیط خارج از dll مینویسم استفاده کن. یعنی بجای Pr1 بیا MainPr1 رو فایر کن واسم.
توی تابع MainPr1 یکی از دستوراتم Form2.Show هست. که وقتی این اجرا میشه فرم 2 رو یک لحظه باز میکنه و سریع میبنده. وقتی هم که برنامه رو خارج میکنم پیغام Invalid Windows Handler میاد واسم.