VS C ++ Проблема с InvokeRequired / делегировать void - PullRequest
0 голосов
/ 02 ноября 2011

Я новичок в C ++, и я использую VS2010. Может ли кто-нибудь проверить приведенный ниже код и помочь решить его? Каждый раз функция UpdateDataGrid(unsigned char CANPacket[15]) вызывается следующее сообщение отображается в новом окне и приложение закрывается.

An unhandled exception of type 'System.ArgumentException' occurred in System.Windows.Forms.dll
Additional information: Object of type 'System.Byte' cannot be converted to type 'System.Byte*'.

Я должен использовать unsinged char тип данных, а не String^ в этом проекте. Есть ли способ исправить мой код?

//Piece of my code

namespace VCCDC {

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

public ref class Form1 : public System::Windows::Forms::Form
{
    delegate void UpdateDataGridCallback(unsigned char CanPacket[15]);


    private: void UpdateDataGrid(unsigned char CANPacket[15]) {

        if (this->dataGridView1->InvokeRequired) {

            UpdateDataGridCallback^ d = gcnew UpdateDataGridCallback(this,&VCCDC::Form1::UpdateDataGrid);
            this->Invoke(d,gcnew unsigned char(CANPacket[15]));
        }

        else {
            //Update dataGridView1 with new data

        }

    }
}
}]

1 Ответ

0 голосов
/ 03 ноября 2011

Изменить строку

this->Invoke(d,gcnew unsigned char(CANPacket[15]));

до

this->Invoke(d,CANPacket));

У вас уже есть указатель unsigned char, пропустите его. С gcnew вы намерены создать еще один, который не нужен.

Также ошибка, вызванная этой gcnew строкой. Вы должны создать Byte* с параметром Byte. У тебя тоже Byte*.

...