外部ライブラリを使用して、2 つのアプリ間の udp (OSC) 通信を処理します。送信されるメッセージをフォーマットするために、ライブラリは char* を想定していますが、変換する必要がある UI から文字列を取得します。
コードの他の部分を扱っている間、udp の部分は次のようにハードコードされていました。
char* endofMess = "from setEndMess";
そしてうまくいっていました。私の文字列で動作させるのは簡単だと思い、次のように書きました:
std::string s = "from setEndMess";
char* endofMess = const_cast<char*>(s.c_str());
しかし、正しくフォーマットされたメッセージを受信していた最初の例とは異なり、意味不明な文字しか受信しません。誰かがそれがどこから来るのか知っていますか?
ありがとう!
マチュー
EDIT:私が使用するコード:OSCValが変更されるたびにメッセージを送信する方法:
void osc500::testOSC(int identifier, float OSCval)
{
UdpTransmitSocket transmitSocket( IpEndpointName( destIP, port ) );
char buffer[1024];
osc::OutboundPacketStream p( buffer, 1024 );
p << osc::BeginBundleImmediate
<< osc::BeginMessage( endofMess )
<< OSCval << osc::EndMessage
<< osc::EndBundle;
transmitSocket.Send( p.Data(), p.Size() );
}
OSC パターンを変更する必要がある場合は、これを次のように呼び出します。
void osc500::setEndMess(String endpattern){
// endofMess = "from setEndMess"; //OK works fine each time it's called
//1st try :
//std::string s = "from setEndMess";
//endofMess = const_cast<char*>(s.c_str()); //gibberish
//2nd try :
//std::string s = "from setEndMess";
//endofMess = &s[0]; //gibberish
//3rd & 4th tries :
//char s[4] = {'t','e','s','t'};
//char s[5] = {'t','e','s','t','\0'};
//endofMess = s; //gibberish
}