Я пытаюсь запустить старый код VC ++ в 2010VC ++ Я получаю ошибку C387 error - PullRequest
0 голосов
/ 20 декабря 2010
this->InitButton->Location = System::Drawing::Point(24, 8);
this->InitButton->Name = S"InitButton";
this->InitButton->Size = System::Drawing::Size(184, 24);
this->InitButton->TabIndex = 0;
this->InitButton->Text = S"Initialize NMC Network";

// this give an error
this->InitButton->Click += new System::EventHandler(this, InitButton_Click);

Ответы [ 3 ]

2 голосов
/ 20 декабря 2010
this->InitButton->Click += gcnew System::EventHandler(this, InitButton_Click);

Это C3867, а не C387. Вы должны указать имя класса с именем метода в C ++ / CLI. Его синтаксис для назначения делегатов совершенно не похож на синтаксис языка C #, здесь нет синтаксического сахара. Это никак не связано с VS2010, его не удается скомпилировать и в более ранних выпусках. Исправлено:

this->InitButton->Click += gcnew System::EventHandler(this, &Form1::InitButton_Click);

Замените Form1 на имя вашего производного класса Form. На самом деле вам это не нужно, но это шаблон в сгенерированном дизайнером коде. Позволить дизайнеру сгенерировать этот код - лучший способ избежать неприятностей.

0 голосов
/ 21 декабря 2010

Спасибо, Вы правы насчет кода ошибки (опечатка). Я был в состоянии скомпилировать это с предупреждением сейчас. Я сделал некоторые изменения. Изменена поддержка времени выполнения общеязыкового языка на старый синтаксис и возможность его компилировать и запускать.

Поддержка общеязыковой среды выполнения, старый синтаксис (/ clr: oldSyntax)

0 голосов
/ 20 декабря 2010

В дополнение к ответу Ганса о правильном способе получения указателя на член для конструирования делегата C ++ / CLI не использует префикс S в управляемых строках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...