シリアル COM ポートに 16 進数のバイトを送信しようとしています。問題は、コマンドを送信するセグメントが整数ではなくシステム文字列を必要としているように見えることです (エラー C2664 "パラメータ 1 を 'int' から 'System::String ^' に変換できません)。代わりに整数を使用しましたが、うまくいきませんでした (16 進値の文字列表現を送信しようとしましたが、デバイスはコマンドを認識しませんでした)。
コードの主要部分
private: System::Void poll_Click(System::Object^ sender, System::EventArgs^ e)
{
int i, end;
double a = 1.58730159;
String^ portscan = "port";
String^ translate;
std::string portresponse [65];
std::fill_n(portresponse, 65, "Z");
for (i=1;i<64;i++)
{
if(this->_serialPort->IsOpen)
{
// Command 0 generator
int y = 2;
y += i;
int command0[10] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, dectohex(i), 0x00, 0x00, dectohex(y)};
for (end=0;end<10;end++)
{
this->_serialPort->WriteLine(command0[end]);
}
translate = (this->_serialPort->ReadLine());
MarshalString(translate, portresponse [i]);
if(portresponse [i] != "Z")
{
comboBox7->Items->Add(i);
}
this->progressBar1->Value=a;
a += 1.58730159;
}
}
}
関数dectohexは次のとおりです。
int dectohex(int i)
{
int x = 0;
char hex_array[10];
sprintf (hex_array, "0x%02X", i);
string hex_string(hex_array);
x = atoi(hex_string.c_str());
return x;
}
これが私の問題を解決したものです。ヨッヘン・カルムバッハの厚意により
auto data = gcnew array<System::Byte> { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xBF, 0x00, 0x00, 0xBD };
_serialPort->Write(data, 0, data->Length);
これを交換しました
this->_serialPort->WriteLine(command0[end]);