مسیج باکس در c++ دات نت

sara_she

Member
MessageBox و dll در c++.net 2003

با سلام
من با vs c++.net 2003 كار مي كنم وقتي كه در رويداد كليك كد زير رو مي نويسم خطايي مبني بر اينكه massegebox و متد show‌رو نمي شناسه مي گيره .در ضمن من باclr \ كار مي كنم.
MessageBox::Show
(
"sepehr."
, "hosseini"
, MessageBoxButtons::YesNo

);

خطا: error C2653: 'MessageBoxA' : is not a class or namespace name

): error C2660: 'System::Windows::Forms::Control::Show' : function does not take 3 arguments
 
آخرین ویرایش توسط مدیر:

saalek110

Well-Known Member
در ورژن 2003 (البته من خودم همیشه در 2005 کار می کنم ولی برای اطمینان 2003 را هم در یک ویندوز دیگر نصب کردم) یک پروژه ویژوال سی از نوع .net ساختم و دو دکمه قرار دادم روی فرم. در داخل اولی دقیقا کد را از پست دوم این تاپیک کپی پیست کردم و در دکمه دوم دقیقا از روی کد شما سارا خانم کپی کردم.
کد:
private: System::Void button1_Click(System::Object *  sender, System::EventArgs *  e)
			 {
MessageBox::Show
                                 (
                                 "sepehr."
                                 , "hosseini"
                                 , MessageBoxButtons::YesNo
                                
                                 );
			 }

	private: System::Void button2_Click(System::Object *  sender, System::EventArgs *  e)
			 {
				 MessageBox::Show
(
"sepehr."
, "hosseini"
, MessageBoxButtons::YesNo

);
			 }

بی هیچ خطایی اجرا شد.
آیا پروژه شما atl یا mfc یا win32 نیست؟
آیا کد دیگری غیر این کد ندارید که به آنها خطا داده باشد؟
دیگه چیزی فعلا به ذهنم نمی رسد.
 
آخرین ویرایش:

sara_she

Member
اولأ ممنون از توجهتون
دوم اينكه من تو vs c++.net يك dll‌ ساختم و با add existing item به اون( winform application(.net اضافه كردم. حالا وقتي تو هدر كلاس فرم براي رويداد button از masseagebox‌ استفاده مي كنم اين خطاهايي كه گفتم رخ مي ده تازه هدر اين كلاس رو به dll هم اضافه كردم
در مورد فرم هام هم تو همين تاپيك با عنوان اضافه كردن فرم به dll سوالي مطرح كردم ولي كسي جوابمو نداده
 

saalek110

Well-Known Member
با سلام.

در تمریناتی که من قبلا انجام دادم ما می آمدیم یک پروژه از نوع ((کلاس لایبرری)) می ساختیم که حاوی چند کلاس باشد . بعد با زدن بیلد یک dll ساخته میشد. و هیچ اجرا و نمایشی داخل پروژه نداشتیم.

حالا در پروژه dll شما چند فرم هم اضافه شده . یعنی اگر من درست فهمیده باشم داخل dll ما فرم هم داریم. البته فرم خودش یک کلاس است که می توان مثل بقیه کلاسها از آن شی ساخت و از متدهای آن استفاده کرد. (منظور در پروژه ثانوی است که برای استفاده از dll ساخته شده در پروژه قبلی ایجاد شده.)
کلا من یک dll را حاوی کلاسهایی می دانم که بعد اعلام استفاده از آن dll می شود از کلاسهای موجود در dll بیاییم شی بسازیم و از متدهای شی استفاده کنیم.

و حالا باید بیایم به dll یک فرم هم اضافه کنم(پستهای بعدی) و ببینم آیا می توانم از پروژه ثانوی(استفاده کننده از dll ) فرم داخل dll را به نمایش درآورم یا نه.(به نمایش در می آید) و هنوز دقیق نفهمیدم که دستور مسیج باکس در کجا قرار دارد . آیا داخل فرمی است که داخل dll است ؟ زیرا که در پست قبلی دیدیم که مسیج باکس وقتی عادی استفاده بشود مشکلی ایجاد نمی شود. پس بایستی جایی دیگر باشد.(هر جا باشد باید به رفرنس های پروژه در سولوشن اکسپلورر و یوزینگ بالای فایل سیستم.ویندوز . فرمز افزوده شود.)دقیق تر جای آن را مشخص کنید.
بعد توضیحات شما می شود پروژه مورد نظر را ساخت.
-------------
آیا فرم داخل dll بر روی آن باتون قرار داده اید و دستور مسیج باکس را در آن نوشته اید؟ یا اینکه باتون مورد بحث در روی فرم پروژه ثانوی است؟
خواهشا به طور مشروح همه کارهایی را که انجام داده اید را بگویید . همه برنامه را. یا اینکه دو پروژه را ارسال کنید.
 
آخرین ویرایش:

saalek110

Well-Known Member
من الان در سی شارپ یک dll ساختم حاوی یک کلاس . که داخل کلاس یک متد دارد و داخل متد این کد را اضافه کردم:
کد:
MessageBox.Show("abc");

ولی خطا داد و این خط را اضافه کردم :
کد:
using System.Windows.Forms;
ولی باز هم خطا داد چون جزو رفرنس های من نبود. پس روی رفرنس در سولوشن اکسپلورر در پروژه dll ئی خود کلیک راست کردم و add refrence را زدم و system.windows.forms را به رفرنس های پروژه افزودم.کلا این طور شد:
کد:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace my_dll
{
    public class Class1
    {
         public String a;

        public void my_function()
        {
            MessageBox.Show("abc");
        }
    }
}

بعد پروژه بی اشکال بیلد شد و dll ساخته شد و در پروژه بعدی با خطهای زیر :
کد:
        private void button1_Click(object sender, EventArgs e)
        {
            Class1 my_class = new Class1();
            my_class.my_function();
        }
از dll استفاده کردم.
ولی قبلش باید dll خود را بروس کنید از هارد و ادد رفرنس کنیم به پروژه و خط زیر را هم افزودم به using های پروژه :
کد:
using my_dll;

حالا در گام بعد می خواهم یک فرم به dll اضافه کنم و ببینم آیا قابل فرم داخل dll قابل نمایش از طریق پروژه ثانوی هست یا نه.
 
آخرین ویرایش:

saalek110

Well-Known Member
پس یک فرم به پروژه dll ئی اضافه کردم و در پروژه ثانوی چنین از آن استفاده کردم.
کد:
        private void button2_Click(object sender, EventArgs e)
        {
            my_dll.Form1 yek_form = new my_dll.Form1();
            yek_form.Show();
        }
نتیجه: داخل dll ما اجازه داریم هر نوع ابزار بصری را هم استفاده کنیم.
 

saalek110

Well-Known Member
حالا وارد ویژوال سی دات نت 2003 می شویم.
در سولوشن دو پروژه می سازیم. یکی برای ساخت dll و یکی برای استفاده از dll .
در اولی در فایل my_dd.h کد زیر را افزودم:
کد:
 		public:
              void SomeFunction()
                {
					 MessageBox::Show("test");
                }
ولی خطا داد. که باز طبق شرح پستهای بالا که در سی شارپ کار شده بود
اولا به رفرنس پروژه سیتم.ویندوز.فرم اضافه شد
و دوما بالای فایل هم یوزینگ شد.

اما در پروژه استفاده از dll کد زیر را قرار دادم:
کد:
	private: System::Void button1_Click(System::Object *  sender, System::EventArgs *  e)
			 {
				 my_dll::Class1 *my_class ;
			     my_class->SomeFunction();
			 }
البته سینتکس بالا شاید غلط باشد چون من وی سی دات نت کار نمی کنم. ولی اجرا شد.
البته قبلش مثل پروژه سی شارپی پست قبل باید
به رفرنس ها با بروس فایل dll را معرفی کنیم. با کلیک راست روی رفرنس و منوی ادد رفرنس در سولوشن اکسپلورر.

خوب. در پروژه بالا ما یک dll داشتیم که با وجودی که فرم نداشت از دستور مسیج باکس موجود در متدهای کلاس آن استفاده کردیم.

- - - - -
حالا به dll یک فرم هم اضافه می کنیم. و با کد زیر فرم را ظاهر می کنیم:
کد:
	private: System::Void button2_Click(System::Object *  sender, System::EventArgs *  e)
			 {
				 my_dll::form_dar_dll *yek_form=new  my_dll::form_dar_dll();
				 yek_form->Show();
			 }
باز هم می گویم من سینتکس وی سی ++ بلد نیستم ولی کد بالا اجرا شد و فرم موجود در dll را نشان داد.
نیاز یا عدم نیاز کد زیر بالای فایل:
کد:
using namespace my_dll;
زیاد مطمئن نیستم ولی فکر نمی کنم به وجودش نیاز باشد.

شکل زیر هم نمایش کلاسها و متدهای داخل dll با ابزار ildasm است. ((کلاس ساخته شده و فرم )) کلاسهای درون این فایل هستند.

c1.jpg
 
آخرین ویرایش:

sara_she

Member
ممنون از اين راهنايي مفصل و كاملتون
ولي مشكل من حل نشد
مشكل اينه كه من وقتي شبيه كاري كه شما گفتيد با classlib يك dll‌مي سازم با masseagebox مشكلي نداره ولي من يك dll نوشته شده با vs.net دارم كه به صورت آماده است و بايد يه سري كار روش انجام بدم نمي دنم از چه نوعيه كه با massagebox خطاهاي زير رو مي د ه:

error C2660: 'System::Windows::Forms::Control::Show' : function does not take 1 arguments

error C2653: 'MessageBoxA' : is not a class or namespace name

شايد به هدر خاصي احتياج داره اگه مي دونيد از كدوم هدر براي تعريف massagebox استفاده مي شه منو راهنمايي كنيد.
دوم اينكه من به اين dll‌آماده همون طور كه گفتيد با addclass‌ چندفرم .net اضافه كردم ولي نمي تونم ازشون تو فايل cpp تعريف شده براي dll‌ ام استفاده كنم چون وقتي مي نويسم(تو cpp نه هدر كلاس)
winform *form1 = new winform();

form1->Show();

در زمان build نه كلاس winform‌رو مي شناسه نه متد show رو .هرچند من هدر كلاس رو بهش اضافه كردم . اصلا نمي دونم چه طور مي شه از كلاس ها و فرم هاي تعريف شده و اضافه شده به dll در اون استفاده كرد . در ضمن من نمي خوام از اين dll تو همين محيط استفاده كنم استفاده من از اين dll‌در اتوكد است كه اونجت چند فرم دارم و مي خوام با صدور هر فرمان يا كليك دكمه اي در فرم اتوكد يكي از فرم هاي تعريف شده در dll‌فعال بشه . لطفا با توجه به سوال و روشي كه كار كردم پاسخ بدين

كد فايل cpp براي dll:
#include "stdafx.h"
#include "winform.h"


void showform()
}
? winform *form1 =new winform;
? forml->Show();

{

و هدر كلاس winform اضافه شده به dll : يعني :( winform.h

public __gc class winform : public System::Windows::Forms::Form
{
public:
winform(void)
{
InitializeComponent();
}
.
.
.
private: System::Void button1_Click(System::Object * sender, System::EventArgs * e)
{
label1->Text="شما روي دكمه اي كليك كرديد";

}

public:

void examfunc(void)
}

? MessageBox ::Show("test!");


; {
اونجاهايي كه ? گذاشتم خطا داره
 

saalek110

Well-Known Member

من نمی دانم آن dll حاوی چه متدها و کلاسهایی است. اگر ساده است که از اول خودتان بنویسید و اگر بزرگ و حجیم است چیزی که می ماند دو کار است:
اول اینکه با همان ildasm نگاه کنید به ورودی و خروجی های متد . کلا وقتی ما ندانیم درون متدی چیست باید با توجه به ورودی و خروجی آن ازش استفاده کنیم.

c1.gif

و دوم اینکه در ildasm با کلیک بر روی هر متد کد آن را به زبان il می توانید ببینید و بفهمید چه کاری آن متد انجام می دهد.


c2.gif
 
آخرین ویرایش:

sara_she

Member
سلام . ممنون از توجهتون
ببينيد من قسمتي ازكد هدر فرم (winform.h) و dll‌رو كه به نظرم لازم بود پست قبلم گذاشتم و اين رو هم مي دونم كه از dll نمي شه به تنهايي استفاده كرد. مشكلم با نمايش فرم در استفاده كننده dll‌حل شد ولي مشكل massagebox همچنان باقيه. مي خوام وقتي در مصرف كننده فرم dll‌باز شد با كليك روي دكمه massagebox‌ نشان دهم طبق اون چيزي كه تو winform.h‌گذاشتم.مشكل من تعريف نشده بودن massagebox تو winform.h و حتي dll است يعني نه خود massagebox و نه متد show اون رو نمي شناسه
 

saalek110

Well-Known Member
با سلام. من در پروزه ای که گذاشتم در پستهای قبلی متدی در dll بود که کد آن مسیج باکس بود و من در پروژه استفاده کننده توانستم با صدا زدن آن متد مسیج باکس را اجرا کنم. ولی قبلش در پروژه dll خطا دریافت کردم که مجبور شدم به رفرنس های آن پروژه dll ئی رفرنس ((سیستم.ویندوز.فرمز)) را بیافزایم و در یوزینگ هم استفاده کردم.

من الان در سی شارپ یک dll ساختم حاوی یک کلاس . که داخل کلاس یک متد دارد و داخل متد این کد را اضافه کردم:
کد:
MessageBox.Show("abc");

ولی خطا داد و این خط را اضافه کردم :
کد:
[COLOR="Red"]
using System.Windows.Forms;
[/COLOR]
ولی باز هم خطا داد چون جزو رفرنس های من نبود. پس روی رفرنس در سولوشن اکسپلورر در پروژه dll ئی خود کلیک راست کردم و add refrence را زدم و system.windows.forms را به رفرنس های پروژه افزودم.کلا این طور شد:
کد:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace my_dll
{
    public class Class1
    {
         public String a;

        public void my_function()
        {
            MessageBox.Show("abc");
        }
    }
}

بعد پروژه بی اشکال بیلد شد و dll ساخته شد
 
آخرین ویرایش:

saalek110

Well-Known Member
برای امتحان باز وارد ویژوال سی 2003 می شوم.
دو پروژه باز می کنم. اولی با نام one_dll از نوع ((کلاس لایبرری)) و دومی به نام user_of_dll از نوع ((ویندوز فرم اپلیکیشن)).

به پروژه اول یک فرم اضافه می کنیم. با نام formi_dar_dll از نوع (( ویندوز فرم دات نت)) .
----------------------------------
تست : دکمه بیلد را در پروژه اول می زنیم.دقیق تر بگویم : از منوی بیلد گزینه بیلد سولوشن را زدم.حال در کنار فایل پروژه one_dll یک پوشه داریم حاوی dll ما با نام one_dll.dll .

در پروژه دوم یعنی user_of_dll یک دکمه ابتدا روی فرم می اندازیم. و در کد آن این خطوط را اضافه می کنیم:
کد:
				 one_dll::formi_dar_dll *yek_form=new  one_dll::formi_dar_dll();
				 yek_form->Show();

همچنین در پنجره سولوشن اکسپلورر روی رفرنسس کلیک راست کرده و ادد رفرنس را زده و بروس کرده و فایل one_dll را به آن معرفی می کنیم.

پروژه user_of_dll را run می کنیم.
نتیجه : با کلیک روی دکمه فرم داخل dll باز می شود.

این کارها را قبلا هم انجام داده بودیم. حالا می خواهیم به فرم داخل dll چیزهایی بیافزاییم.

==========================================================

در پروژه one_dll وارد فایل formi_dar_dll.h می شویم. همان طور که می بینید namespace آن همان one_dll است و کلاس فرم یعنی :
کد:
ublic __gc class formi_dar_dll : public System::Windows::Forms::Form
کلاس formi_dar_dll در این فایل قرار دارد. می توانیم به این کلاس یک متد اضافه کنیم . متد زیر را به کلاس می افزاییم.
کد:
	     {
          MessageBox ::Show("test!");
         }

نکته : باید در قسمت پابلیک پیست شود وگرنه در یوزر dll خواهد گفت که چنین متدی وجود ندارد . و باید بعد از :
کد:
		formi_dar_dll(void)
		{
			InitializeComponent();
		}
فکر کنم باشد. قبلا در یک پروژه فکر کنم گفته بود قبل این قسمت نگذارید. حالا کل این فایل(formi_dar_dll.h) چنین است:
کد:
#pragma once

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;


namespace one_dll
{
	/// <summary> 
	/// Summary for formi_dar_dll
	///
	/// WARNING: If you change the name of this class, you will need to change the 
	///          'Resource File Name' property for the managed resource compiler tool 
	///          associated with all .resx files this class depends on.  Otherwise,
	///          the designers will not be able to interact properly with localized
	///          resources associated with this form.
	/// </summary>
	public __gc class formi_dar_dll : public System::Windows::Forms::Form
	{
	public: 
		formi_dar_dll(void)
		{
			InitializeComponent();
		}
			void examfunc(void)
	     {
          MessageBox ::Show("test!");
         }
        
	protected: 
		void Dispose(Boolean disposing)
		{
			if (disposing && components)
			{
				components->Dispose();
			}
			__super::Dispose(disposing);
		}
        
	private:
		/// <summary>
		/// Required designer variable.
		/// </summary>
		System::ComponentModel::Container* components;

		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		void InitializeComponent(void)
		{
			this->components = new System::ComponentModel::Container();
			this->Size = System::Drawing::Size(300,300);
			this->Text = S"formi_dar_dll";
		}		






	};
}

حالا بیلد را می زنیم. و بعد استفاده کننده در پروژه دیگر کدش چنین است:
کد:
	private: System::Void button1_Click(System::Object *  sender, System::EventArgs *  e)
			 {
				 one_dll::formi_dar_dll *yek_form=new  one_dll::formi_dar_dll();
				 yek_form->Show();

                 yek_form->examfunc();
			 }
نتیجه اجرا : با زدن دکمه در پروژه استفاده کننده .... هم فرم موجود در dll باز می شود و هم یک مسیج باکس.


=====================================
گام 3 :
در این گام می خواهیم روی فرم موجود در dll هم دکمه ای داشته باشیم.
پس روی فرم مزبور یک دکمه قرار می دهیم و کد زیر را درونش می نویسیم:
کد:
	private: System::Void button1_Click(System::Object *  sender, System::EventArgs *  e)
			 {
                  MessageBox ::Show("button of dll_form clicked");
			 }

در اینجا پروژه دوم را تغییری نمی دهیم. فقط اجرایش می کنیم و بعد از اینکه فرم داخل dll ظاهر شد دکمه روی این فرم را می زنیم و می بینیم که یک مسیج باکس ظاهر می شود و رویش همین عبارت button of dll_form clicked نوشته شده.

کل فایل(formi_dar_dll.h) حالا چنین است:
کد:
#pragma once

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;


namespace one_dll
{
	/// <summary> 
	/// Summary for formi_dar_dll
	///
	/// WARNING: If you change the name of this class, you will need to change the 
	///          'Resource File Name' property for the managed resource compiler tool 
	///          associated with all .resx files this class depends on.  Otherwise,
	///          the designers will not be able to interact properly with localized
	///          resources associated with this form.
	/// </summary>
	public __gc class formi_dar_dll : public System::Windows::Forms::Form
	{
	public: 
		formi_dar_dll(void)
		{
			InitializeComponent();
		}
			void examfunc(void)
	     {
          MessageBox ::Show("test!");
         }
        
	protected: 
		void Dispose(Boolean disposing)
		{
			if (disposing && components)
			{
				components->Dispose();
			}
			__super::Dispose(disposing);
		}
	private: System::Windows::Forms::Button *  button1;

	private:
		/// <summary>
		/// Required designer variable.
		/// </summary>
		System::ComponentModel::Container* components;

		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		void InitializeComponent(void)
		{
			this->button1 = new System::Windows::Forms::Button();
			this->SuspendLayout();
			// 
			// button1
			// 
			this->button1->Location = System::Drawing::Point(104, 128);
			this->button1->Name = S"button1";
			this->button1->TabIndex = 0;
			this->button1->Text = S"button1";
			this->button1->Click += new System::EventHandler(this, button1_Click);
			// 
			// formi_dar_dll
			// 
			this->AutoScaleBaseSize = System::Drawing::Size(5, 13);
			this->ClientSize = System::Drawing::Size(292, 266);
			this->Controls->Add(this->button1);
			this->Name = S"formi_dar_dll";
			this->Text = S"formi_dar_dll";
			this->ResumeLayout(false);

		}		






	private: System::Void button1_Click(System::Object *  sender, System::EventArgs *  e)
			 {
                  MessageBox ::Show("button of dll_form clicked");
			 }

	};
}

توجه داشته باشید که در اینجا نیاز نبود که به رفرنس های پروژه dll ئی چیزی بیافزاییم یا به یوزینگ های آن چیزی بیافزاییم چون فرم خودش تمام اشکال نمایشی را ساپورت می کند. در پروژه های قبلی که این کار را کردیم در یک پروژه dll ئی بود که اولش فرم نداشت و به این خاطر باید اعلام می کردیم که می خواهیم از سیستم.ویندوز .فرمز استفاده کنیم.
 
آخرین ویرایش:

saalek110

Well-Known Member
جمع بندی:
اگر dll شما خالی باشد و بخواهید مسیج باکس استفاده کنید باید رفرنس مربوطه یعنی system.windows.forms باید به رفرنس ها اضافه شود و اگر لازم بود به using های بالای فایل هم اضافه شود.

ولی اگر شما فرمی به dll خود اضافه کرده اید داخل آن فایل(کدهای فرم) نیازی به اضافه کردن رفرنسی ندارید.

---------------------
وقتی روی فرم داخل dll ابزارهایی باشد و آن ابزارها دارای رویدادهایی باشد .... بعد از فراخوانی آن فرم توسط پروژه استفاده کننده تمامی رویدادهای آن ابزارها درست کار می کنند. البته این یک تعمیم دهی است و من در پست قبلی فقط از رویداد کلیک یک باتون استفاده کردم.
 
آخرین ویرایش:

sara_she

Member
من تمام اين كارهايي كه گفتيد انجام دادم الان هم وقتي + كنار refernce رو باز مي كنم System::Windows::Forms جزو اون است همين طور به صورت using هم اونو اضافه كردم ولي باز هميون خطا ها رو مي گيره كه قبلأ گذاشتم مبني بر نشناختن فضاي نام massagebox و متد show
 

saalek110

Well-Known Member
پس مشکل در رفرنس و using احتمالا نیست. مشکل هر جایی می تواند باشد. از ویندوز تا ویژوال استودیو. اگر میشه پروژه را برایم بفرستید تا اگر در کامپیوتر من درست کار کند به فکر جای دیگر باشیم. من تمام کارهایی که شما انجام دادید را انجام دادم ولی خطا دریافت نکردم. یعنی اضافه کردن فرم به dll . کدنویسی برای رویداد دکمه روی فرم. و کدش را هم مسیج باکس قرار دادم. قبلا هم که به شکل ساده و بدون صدا زدن dll مسیج باکس را استفاده کردم. کلا تمامی حالات را من برنامه اش را ساختم. و مشکلی نداشتم.
 

sara_she

Member
فكر نمي كنم بتونيد كد منو اجرا كنيد چون نياز به زبان objectarxداريد ولي مي دونم ربطي به اون نداره تمام قستم هاي مورد نياز رو قبلا فرستادم . به هدر خاصي نياز نداره؟
 

sara_she

Member
من به پيشنهاد دوستان قبل از messagebox::show از undef# استفاده كردم حالا ديگه موقع اجرا ازش خطا نمي گيره ولي خوب messagebox‌رو نشون نميده يعني با كليك روي دكمه اي كه در رويداد كليكش دستور messagebox::show‌رو گذاشتم هيچ اتفاقي نمي افته !

کد:
[LEFT]private: System::Void button1_Click(System::Object *  sender, System::EventArgs *  e)
			 {
				 label1->Text="شما روي دكمه اي كليك كرديد";
                 #undef MessageBox::show("Test!!!");
				
			 }[/LEFT]
 

saalek110

Well-Known Member
منبع:
http://www.codeguru.com/forum/archive/index.php/t-317704.html
---------------------------------------------------
ببینید این کد کمکتون نمی کنه:
کد:
#pragma push_macro("MessageBox")
#undef MessageBox 
result = System::Windows::Forms::MessageBox::Show(this, message, caption, 
buttons, MessageBoxIcon::Question, MessageBoxDefaultButton::Button1, 
MessageBoxOptions::RightAlign);
#pragma pop_macro("MessageBox")
نویسنده این طور توضیح داده:

Thanks for the input. I was able to get it to work, after looking around a bit. It turns out that there are conflicting definitions in managed c++ and in the windows.h header file for MessageBox.

So what I had to do is undefine the one in windows.h so that I could use the managed c++ one
.
 

sara_she

Member
سلام
من تا اونجايي كه از اين لينك فهميدم بايد خطوط كدي كه شما فرستادين به هدر Windows.h اضافه كنم چون Messagebox با كد مديريت شده مشكل داره و بايد تعريفش عوض بشه ولي چطور متونم به اين هدر دسترسي داشته باشم ؟
 

جدیدترین ارسال ها

بالا