毎度お世話になっております。ツンドラと申します。
C++builderを用いてアプリケーション開発をしています。
2つのexeの間で値の送受信が必要となり、通信の方法を調べていました。
そこでこちらのサイトを発見したのですが、エラーで行き詰りました。
http://bcb.client.jp/tips/022_receive_postmessage.html
<Send.exe(送信側) | Unit1.cpp>の
というところで、
E2034 'char *' 型は 'const wchar_t *' 型に変換できない
E2342 パラメータ 'lpWindowName' は const wchar_t * 型として定義されているので char * は渡せない
というエラーが出ました。
型が違うことによるエラーなのはわかったのでキャストなどしてみたのですが状況が改善されなかったため、こちらで質問させて頂きました。
どのように改善すればいいのか教えて頂きたいです。よろしくお願いします。
2つのexeの間で値の受け渡し
Re: 2つのexeの間で値の受け渡し
AppTitleの型をAnsiStringではなくWideStringに変えてみてください。
Re: 2つのexeの間で値の受け渡し
アドバイスありがとうございます。
ご指摘の通り以下のようにソースコードを改変してみました。WideStringにすると.c_str()が使えないようなのでそこも改変しました
エラーは以下の通りです。
E2034 'WideString' 型は 'const wchar_t *' 型に変換できない
E2342 パラメータ 'lpWindowName' は const wchar_t * 型として定義されているので WideString は渡せない
ご指摘の通り以下のようにソースコードを改変してみました。WideStringにすると.c_str()が使えないようなのでそこも改変しました
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// 送信したいアプリのタイトルを設定します
WideString AppTitle = "受信側";
// アプリのタイトルからウィンドウハンドルを取得します
HWND hwnd = FindWindow(NULL, AppTitle);
// LParamに数値を入れてポストメッセージ送信
PostMessage(hwnd, WM_USER+100, 0, StrToInt(Edit1->Text));
}
E2034 'WideString' 型は 'const wchar_t *' 型に変換できない
E2342 パラメータ 'lpWindowName' は const wchar_t * 型として定義されているので WideString は渡せない
Re: 2つのexeの間で値の受け渡し
AppTitleの型をAnsiStringに戻して、FindWindowをFindWindowAに変えるとどうなりますか?(c_str()も戻してください)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 2つのexeの間で値の受け渡し
アドバイスありがとうございます。
ご指摘の通りに修正してみたところ、コンパイルが通りました!
そのときのソースコードです。
ボタンを押してみてもエラーにならないので、正常に動作しているものと思います。
引き続き受信側も実装し、正常に動いているかどうか確かめます。
FindWindowではなく、AnsiString対応のFindWindowAという関数を用いるのですね。思いつきもしませんでした。
こちらのサイトで詳細を知りました。
http://msdn.microsoft.com/en-us/library ... s.85).aspx
アドバイスを下さったh2so5さん、 みけCATさん、ありがとうございました。
ご指摘の通りに修正してみたところ、コンパイルが通りました!
そのときのソースコードです。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// 送信したいアプリのタイトルを設定します
AnsiString AppTitle = "受信側";
// アプリのタイトルからウィンドウハンドルを取得します
HWND hwnd = FindWindowA(NULL, AppTitle.c_str());
// LParamに数値を入れてポストメッセージ送信
PostMessage(hwnd, WM_USER+100, 0, StrToInt(Edit1->Text));
}
引き続き受信側も実装し、正常に動いているかどうか確かめます。
FindWindowではなく、AnsiString対応のFindWindowAという関数を用いるのですね。思いつきもしませんでした。
こちらのサイトで詳細を知りました。
http://msdn.microsoft.com/en-us/library ... s.85).aspx
アドバイスを下さったh2so5さん、 みけCATさん、ありがとうございました。
Re: 2つのexeの間で値の受け渡し
補足ですがc_str()の代わりにc_bstr()を使えばWideStringとFindWindowの組み合わせでコンパイルできるはずです。
Re: 2つのexeの間で値の受け渡し
c_bstr()の方法も試してみたところ、こちらも正常に動作することが確認できました!
以下そのソースコードです。
ありがとうございます。
以下そのソースコードです。
ありがとうございます。