Win32APIについての質問はこちらへどうぞ。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。
英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
■過去スレ
Win32API質問箱 Build125
https://mevius.5ch.net/test/read.cgi/tech/1551247748/
Win32API質問箱 Build124
https://mevius.5ch.net/test/read.cgi/tech/1510395780/
■関連スレ
Visual Studio 2019 Part4 https://mevius.5ch.net/test/read.cgi/tech/1585715794/
Visual Studio 2017 Part7 https://mevius.5ch.net/test/read.cgi/tech/1558179898/
【C++】 DirectX初心者質問スレ Part41 【C】 https://mevius.5ch.net/test/read.cgi/tech/1521786252/
Win32API質問箱 Build126
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2020/05/01(金) 22:16:51.96ID:ZJ42fMZB752デフォルトの名無しさん
2021/08/25(水) 20:26:18.34ID:TCNLfe6z753デフォルトの名無しさん
2021/08/25(水) 21:58:54.28ID:ENQvEefU >>751
プロセスごと始末してくれるから放置で構わん
プロセスごと始末してくれるから放置で構わん
754デフォルトの名無しさん
2021/08/26(木) 05:00:21.78ID:znb4Cn9C 変な日本語・・・
755デフォルトの名無しさん
2021/08/26(木) 16:28:52.50ID:WPRv8+9f こっちくんな
756デフォルトの名無しさん
2021/08/26(木) 17:50:13.63ID:DS5buh7a やって来ました
メッセージボックスで「計算結果はXX」って表示したくて
1 LPCWSTR func() {LPCWSTR a = L"//計算結果の値"; return a;} //計算結果を文字列にして返す関数
2 //以下WinMain()内
3 LPCWSTR a = L"計算結果は";
4 LPCWSTR b = func();
5 LPCWSTR c = 文字列を連結する関数(a, b); //StringCchCatW(), lstrcatW()などを試したがだめだった
6 MessageBoxW(hWnd, c, L"タイトルバー", MB_OK);
と書いたが動かなかった・・・
まず、1行目の「L"//計算結果の値"」に計算結果の変数を入れる方法がわからない
そして、5行目のLPCWSTR型の文字列を連結する方法がわからなからない
一日の大半がエラーとのにらめっこに費やされて辛い・・・
頼む、手伝ってくれさい
メッセージボックスで「計算結果はXX」って表示したくて
1 LPCWSTR func() {LPCWSTR a = L"//計算結果の値"; return a;} //計算結果を文字列にして返す関数
2 //以下WinMain()内
3 LPCWSTR a = L"計算結果は";
4 LPCWSTR b = func();
5 LPCWSTR c = 文字列を連結する関数(a, b); //StringCchCatW(), lstrcatW()などを試したがだめだった
6 MessageBoxW(hWnd, c, L"タイトルバー", MB_OK);
と書いたが動かなかった・・・
まず、1行目の「L"//計算結果の値"」に計算結果の変数を入れる方法がわからない
そして、5行目のLPCWSTR型の文字列を連結する方法がわからなからない
一日の大半がエラーとのにらめっこに費やされて辛い・・・
頼む、手伝ってくれさい
757デフォルトの名無しさん
2021/08/26(木) 17:58:52.10ID:+hQVnBsv 宿題スレ案件ですか?
758デフォルトの名無しさん
2021/08/26(木) 18:24:36.40ID:DS5buh7a >>757
いや普通にニート
いや普通にニート
759デフォルトの名無しさん
2021/08/26(木) 18:27:20.48ID:56nPMNqk >>756
Win32APIではなくC言語の文字列とポインタの違いを勉強するところからやり直し
Win32APIではなくC言語の文字列とポインタの違いを勉強するところからやり直し
760デフォルトの名無しさん
2021/08/26(木) 18:29:12.42ID:iCFmJ4nN wsprintf
761デフォルトの名無しさん
2021/08/26(木) 19:08:13.70ID:Dr81uOON ニートならできないことは諦めればいいんじゃね?
762デフォルトの名無しさん
2021/08/26(木) 19:18:34.62ID:s9ncfwmd >>756
1 void func(CString &str) { str = "計算結果の値" } //計算結果を参照型引数の str に返す関数
2 //以下WinMain()内
3 CString str1 = "計算結果は";
4 CString strKekka;
5 func( strKekka ); // strKekka に計算結果の文字列が入って返って来る。
6 CString str2 = str1 + strKekka;
7 str2 を wide 文字列に直して、wpszText に入れる。 // ここはやり方を調べる。
8 MessageBoxW(hWnd, wpszText, L"タイトルバー", MB_OK);
1 void func(CString &str) { str = "計算結果の値" } //計算結果を参照型引数の str に返す関数
2 //以下WinMain()内
3 CString str1 = "計算結果は";
4 CString strKekka;
5 func( strKekka ); // strKekka に計算結果の文字列が入って返って来る。
6 CString str2 = str1 + strKekka;
7 str2 を wide 文字列に直して、wpszText に入れる。 // ここはやり方を調べる。
8 MessageBoxW(hWnd, wpszText, L"タイトルバー", MB_OK);
763デフォルトの名無しさん
2021/08/26(木) 19:19:53.55ID:WgbRBOxo >>756
自分がどう書いたのかソースそのまま出して
自分がどう書いたのかソースそのまま出して
764デフォルトの名無しさん
2021/08/26(木) 19:21:59.37ID:ltVuiEkY 普通にwstringベースで作れ。
win32のwchar_t*型渡すところで、data()やc_str()使え。
std::to_wstring で数値などなどメジャーな数値型はwstringになる。
最初はwin32の型に代替名つけまくりな文化は
一体なんの型だよって感じで戸惑うわな。
win32のwchar_t*型渡すところで、data()やc_str()使え。
std::to_wstring で数値などなどメジャーな数値型はwstringになる。
最初はwin32の型に代替名つけまくりな文化は
一体なんの型だよって感じで戸惑うわな。
765デフォルトの名無しさん
2021/08/26(木) 19:22:39.20ID:s9ncfwmd >>762
以下の関数を使えば、7 は、
wchar_t *wpszText = ConvertAcpMbcsToUtf16(str2);
でいける。
wchar_t *ConvertAcpMbcsToUtf16( const char *pszStr )
{
// ワイド文字列(UTF16, unicode) へ変換後の文字列長を得る
int lenUnicode = MultiByteToWideChar( CP_THREAD_ACP, 0, pszStr, -1, NULL, 0 );
// 必要な分だけ ワイド文字列(UTF16, unicode) のバッファを確保
wchar_t *pbufUnicode = new wchar_t [lenUnicode];
if ( pbufUnicode == NULL ) {
return NULL;
}
// デフォルトコードページ(ShiftJISなど) から ワイド文字列(UTF16, unicode) へ変換する :
MultiByteToWideChar( CP_THREAD_ACP, 0, pszStr, -1, pbufUnicode, lenUnicode );
return pbufUnicode;
以下の関数を使えば、7 は、
wchar_t *wpszText = ConvertAcpMbcsToUtf16(str2);
でいける。
wchar_t *ConvertAcpMbcsToUtf16( const char *pszStr )
{
// ワイド文字列(UTF16, unicode) へ変換後の文字列長を得る
int lenUnicode = MultiByteToWideChar( CP_THREAD_ACP, 0, pszStr, -1, NULL, 0 );
// 必要な分だけ ワイド文字列(UTF16, unicode) のバッファを確保
wchar_t *pbufUnicode = new wchar_t [lenUnicode];
if ( pbufUnicode == NULL ) {
return NULL;
}
// デフォルトコードページ(ShiftJISなど) から ワイド文字列(UTF16, unicode) へ変換する :
MultiByteToWideChar( CP_THREAD_ACP, 0, pszStr, -1, pbufUnicode, lenUnicode );
return pbufUnicode;
766デフォルトの名無しさん
2021/08/26(木) 19:24:55.54ID:s9ncfwmd767デフォルトの名無しさん
2021/08/26(木) 19:30:35.44ID:s9ncfwmd おっと、最後、MessageBoxW ではなく、MessageBoxA を使っていれば、
7や >>765 の工程は不要で、
MessageBoxA(hWnd, str2, "タイトルバー", MB_OK);
だけでいける。
7や >>765 の工程は不要で、
MessageBoxA(hWnd, str2, "タイトルバー", MB_OK);
だけでいける。
768デフォルトの名無しさん
2021/08/26(木) 19:32:37.80ID:s9ncfwmd なのでまとめると以下のようになる :
void func(CString &str) { str = "計算結果の値"; }
// 以下WinMain()内
CString strKekka;
func( strKekka ); // strKekka に計算結果の文字列が入って返って来る。
CString str2 = CString("計算結果は") + strKekka;
MessageBoxA(hWnd, str2, "タイトルバー", MB_OK);
void func(CString &str) { str = "計算結果の値"; }
// 以下WinMain()内
CString strKekka;
func( strKekka ); // strKekka に計算結果の文字列が入って返って来る。
CString str2 = CString("計算結果は") + strKekka;
MessageBoxA(hWnd, str2, "タイトルバー", MB_OK);
769デフォルトの名無しさん
2021/08/26(木) 22:24:23.76ID:OnjvrKFf 連結はstrcatかsprintf("%s%s", s1, s2 )のTCHAR(wchar_t)版でいけるやろ
あとLPCWSTRはポインタなので、ちゃんと割り当てしてなくて未初期化のままとかないだろうな?
あとLPCWSTRはポインタなので、ちゃんと割り当てしてなくて未初期化のままとかないだろうな?
770蟻人間 ◆T6xkBnTXz7B0
2021/08/27(金) 02:18:22.79ID:PcAf749w LPCWSTRのCはCONST(定数)という意味だから、変更できない。WはWide、つまりUTF-16.
Win32をやる前にC言語の文字列処理をマスターしてくれ。
wsprintfは時代遅れ。バッファオーバーフローを避けるため、バッファサイズ指定できる<strsafe.h>のStringCch...関数群を推奨。
Win32をやる前にC言語の文字列処理をマスターしてくれ。
wsprintfは時代遅れ。バッファオーバーフローを避けるため、バッファサイズ指定できる<strsafe.h>のStringCch...関数群を推奨。
771蟻人間 ◆T6xkBnTXz7B0
2021/08/27(金) 02:34:26.66ID:PcAf749w ポインタ変数は実体を持たない。文字列扱うにはバッファが必要。動的にバッファを確保して楽したいなら、標準C++のstd::wstringか、MFC/WTLのCStringWを使う。
ただし、std::wstringを使う場合でC文字列が欲しい場合はc_str()メソッドを使う必要がある。下手な型キャストはケガのもと。
ただし、std::wstringを使う場合でC文字列が欲しい場合はc_str()メソッドを使う必要がある。下手な型キャストはケガのもと。
772デフォルトの名無しさん
2021/08/27(金) 07:26:15.44ID:4k6BS6Dx WindowsでC/C++を学ぼうとすると、文字列の扱いは混乱するだろうね
OSを特定しない教科書に載ってるようなやり方もできるから心配するな
一応の結果の表示をできるようになったら、とりあえずその方法だけ使って次に進んで、一通り理解したらまた文字列処理に戻ってくるといいんじゃないかな
OSを特定しない教科書に載ってるようなやり方もできるから心配するな
一応の結果の表示をできるようになったら、とりあえずその方法だけ使って次に進んで、一通り理解したらまた文字列処理に戻ってくるといいんじゃないかな
773デフォルトの名無しさん
2021/08/27(金) 07:43:07.26ID:bixNKZnz ぎゃー
教えてくれたのに遅れてすまん
今からエディター起動する
教えてくれたのに遅れてすまん
今からエディター起動する
774デフォルトの名無しさん
2021/08/27(金) 08:37:51.16ID:lOnGsJ7M スレタイ読もうな?
775デフォルトの名無しさん
2021/08/27(金) 10:35:04.22ID:Zo8CY4eq >>770-771
この段階の人には情報過多
この段階の人には情報過多
776デフォルトの名無しさん
2021/08/27(金) 10:43:55.91ID:BFKMFKNN C言語の基礎からやり直せ、と助言するのが正しい
777デフォルトの名無しさん
2021/08/27(金) 11:25:56.35ID:bixNKZnz778デフォルトの名無しさん
2021/08/27(金) 11:59:25.59ID:Ti/YAON1 お前には完成する能力は無い
779デフォルトの名無しさん
2021/08/27(金) 12:35:37.97ID:S83DaDnk 先が思いやられるな
特にWin32APIにこだわる理由が無いならC#でやることをおすすめする
特にWin32APIにこだわる理由が無いならC#でやることをおすすめする
780デフォルトの名無しさん
2021/08/27(金) 18:42:32.62ID:v1ag2e+a 特殊な理由でもない限りネイティブc/c++なんて使わんでいいよ
781デフォルトの名無しさん
2021/08/27(金) 19:44:48.26ID:ykQTaA3x Cだと、こんな感じかな
- - - - - - - - - - - - - - - -
LPCTSTR a;
int b;
TCHAR c[20];
a = TEXT("計算結果は");
b = 2;
wsprintf(c, TEXT("%s%d"), a,b);
MessageBox(NULL, c, TEXT("タイトルバー"), MB_OK);
- - - - - - - - - - - - - - - -
LPCTSTR a;
int b;
TCHAR c[20];
a = TEXT("計算結果は");
b = 2;
wsprintf(c, TEXT("%s%d"), a,b);
MessageBox(NULL, c, TEXT("タイトルバー"), MB_OK);
782デフォルトの名無しさん
2021/08/27(金) 20:04:56.02ID:v1ag2e+a 今でもTEXT()って要るの?
783デフォルトの名無しさん
2021/08/27(金) 20:22:50.96ID:S83DaDnk なんでせっかくTCHAR使っててwsprintfやねん
784デフォルトの名無しさん
2021/08/27(金) 20:24:35.54ID:EK7jPK8d MBCSかUNICODE決め打ちならいらない
LPCTSTR,TCHARも同じ
LPCTSTR,TCHARも同じ
785デフォルトの名無しさん
2021/08/27(金) 20:35:07.25ID:Zo8CY4eq786デフォルトの名無しさん
2021/08/27(金) 20:36:31.85ID:oI5nTqpL >>783
wsprintfはTCHARでは
wsprintfはTCHARでは
787デフォルトの名無しさん
2021/08/27(金) 20:36:59.87ID:olVwmysy788デフォルトの名無しさん
2021/08/27(金) 20:42:31.64ID:Zo8CY4eq ?
789蟻人間 ◆T6xkBnTXz7B0
2021/08/27(金) 20:45:13.11ID:PcAf749w sprintf/swprintfはC標準。
wsprintfはWin32。
これはテストに出ないぞ!
wsprintfはWin32。
これはテストに出ないぞ!
790デフォルトの名無しさん
2021/08/27(金) 20:48:57.74ID:olVwmysy791デフォルトの名無しさん
2021/08/27(金) 22:20:01.88ID:5zZ7szBm >>786
TCHARはワイドとマルチバイトの両方なんだからwprintf決め打ちじゃなくて_tprintf
TCHARはワイドとマルチバイトの両方なんだからwprintf決め打ちじゃなくて_tprintf
792デフォルトの名無しさん
2021/08/27(金) 22:35:10.18ID:oI5nTqpL >>791
wsprintfはTCHARでは
wsprintfはTCHARでは
793デフォルトの名無しさん
2021/08/27(金) 22:53:41.84ID:ykQTaA3x >>782
これからWin32APIを理解し始めようと考えている人には、そうゆう疑問を持てるレベルにまで頑張って到達してほしいな、という思いでマクロ表記にしてみたよ。
実用上、必要か不要か・・・で言えば場合によるんだろうけど。
現時点でWin32API が内部で ANSI と UNICODE を明確に区別しているので、作法として気にする必要はあると思われます
これからWin32APIを理解し始めようと考えている人には、そうゆう疑問を持てるレベルにまで頑張って到達してほしいな、という思いでマクロ表記にしてみたよ。
実用上、必要か不要か・・・で言えば場合によるんだろうけど。
現時点でWin32API が内部で ANSI と UNICODE を明確に区別しているので、作法として気にする必要はあると思われます
794デフォルトの名無しさん
2021/08/27(金) 23:06:30.48ID:5zZ7szBm795蟻人間 ◆T6xkBnTXz7B0
2021/08/27(金) 23:07:19.75ID:PcAf749w _T系の関数マクロは<tchar.h>で定義されていて、主にC実行時関数を振り分ける。これらはAnsi/Wideを振り分けるTEXT系とは別に分離された機構になっている。
796蟻人間 ◆T6xkBnTXz7B0
2021/08/27(金) 23:09:32.07ID:PcAf749w797蟻人間 ◆T6xkBnTXz7B0
2021/08/27(金) 23:18:41.05ID:PcAf749w UNICODEマクロでA/Wの振り分け。
頭に下線のついた_UNICODEマクロで_T系の振り分けができる。
これらはVisual Studioで適切にソリューション/プロジェクトの設定を行えば自動で定義される。
GCCやclangでは-municode をコンパイルオプションに追加する。
ただし、ユニコードプロジェクトではWinMainはwWinMainに切り替わるので注意しよう。
頭に下線のついた_UNICODEマクロで_T系の振り分けができる。
これらはVisual Studioで適切にソリューション/プロジェクトの設定を行えば自動で定義される。
GCCやclangでは-municode をコンパイルオプションに追加する。
ただし、ユニコードプロジェクトではWinMainはwWinMainに切り替わるので注意しよう。
798蟻人間 ◆T6xkBnTXz7B0
2021/08/27(金) 23:22:46.33ID:PcAf749w ユニコードプロジェクトにせず、代わりにUNCODEマクロと_UNCODEマクロを定義済みにするというやり方もある。こちらはCMakeでよく使う。
799蟻人間 ◆T6xkBnTXz7B0
2021/08/27(金) 23:25:34.94ID:PcAf749w ユニコードプロジェクトではないときにUnicode のコマンドラインを取得したい場合は、GetCommandLineWと
CommandLineToArgvWと
LocalFree を使う。
CommandLineToArgvWと
LocalFree を使う。
800蟻人間 ◆T6xkBnTXz7B0
2021/08/27(金) 23:32:23.92ID:PcAf749w ミッキマウスミッキマウスミッキミッキマウス
天安門事件
旭日旗☀
天安門事件
旭日旗☀
801デフォルトの名無しさん
2021/08/28(土) 06:56:04.31ID:zdnaC7QB ,>>798
まぁ今となってはWindowsのUTF16LEはUNCO(ウンコ)なコードだったな
2バイト固定で1文字ってのは、簡易な多言語対応とstrlen系の文字数計算に楽だったんだろうけどそれだけだろ
まぁ今となってはWindowsのUTF16LEはUNCO(ウンコ)なコードだったな
2バイト固定で1文字ってのは、簡易な多言語対応とstrlen系の文字数計算に楽だったんだろうけどそれだけだろ
802デフォルトの名無しさん
2021/08/28(土) 08:30:55.56ID:UNt1DdTH サロゲートペアに対応したので、その文字数計算も単純にできなくなってしまった。
文字数計算がややこしいのはUTF-8もそうなので、UTF16〜が全然ダメということではないが。
開発面では、将来的に UTF-16(IVS)が必要になってくると、UTF8でいいじゃん、ということになって。
Visual stduio のデフォルトが再度ANSI(UTF-8)に戻る可能性はある。
長い目でWin32APIを見るなら、ANSIアプリの構築方法も忘れないでおく必要はありそうだ
文字数計算がややこしいのはUTF-8もそうなので、UTF16〜が全然ダメということではないが。
開発面では、将来的に UTF-16(IVS)が必要になってくると、UTF8でいいじゃん、ということになって。
Visual stduio のデフォルトが再度ANSI(UTF-8)に戻る可能性はある。
長い目でWin32APIを見るなら、ANSIアプリの構築方法も忘れないでおく必要はありそうだ
803デフォルトの名無しさん
2021/08/28(土) 09:06:21.83ID:YWpKrN9v アラビア語かなんか知らんが、サロゲートペアの問題ではなく、さらに
UTF32 では 2 文字(32BIT x 2) なのに、画面上では文字の上や下に斜線
が入るような文字がある。日本語の濁点のようなもの。サに点々を打ってザ
と書くようなのを、サ + ” みたいな二文字で表現するらしい。
そんなものまで日本人が対応しなくて良いと個人的には思ってる。
UTF32 では 2 文字(32BIT x 2) なのに、画面上では文字の上や下に斜線
が入るような文字がある。日本語の濁点のようなもの。サに点々を打ってザ
と書くようなのを、サ + ” みたいな二文字で表現するらしい。
そんなものまで日本人が対応しなくて良いと個人的には思ってる。
804デフォルトの名無しさん
2021/08/28(土) 09:09:13.47ID:YWpKrN9v UTF8 --> UTF16(サロゲートペア) --> UTF32 1 文字
の問題だけでなく、特殊な言語では、
UTF8 --> UTF32 2文字 --> 画面上では 1 文字
の問題が有るということ。
日本人が対応できるのは、UTF32 1文字が画面上で1文字に見えるまでが限界。
の問題だけでなく、特殊な言語では、
UTF8 --> UTF32 2文字 --> 画面上では 1 文字
の問題が有るということ。
日本人が対応できるのは、UTF32 1文字が画面上で1文字に見えるまでが限界。
805デフォルトの名無しさん
2021/08/28(土) 09:33:08.48ID:nCwHwokI KPS 9566-2000にはフル対応しる
806デフォルトの名無しさん
2021/08/28(土) 09:53:59.20ID:3VTMYlES807デフォルトの名無しさん
2021/08/28(土) 10:02:21.59ID:gw2R54kI >>779
C#だっておバンバン
C#だっておバンバン
808デフォルトの名無しさん
2021/08/28(土) 10:50:07.25ID:Wn50/Mou >>794
勘違いしましたごめんなさいは?w
勘違いしましたごめんなさいは?w
809デフォルトの名無しさん
2021/08/28(土) 12:21:19.46ID:jkQHTYKd810デフォルトの名無しさん
2021/08/28(土) 13:14:56.03ID:I3iUh714811デフォルトの名無しさん
2021/08/28(土) 13:29:17.35ID:78cNf6mY 中東とアメリカは中が悪いから、わざと変な文字コードにしたのかも知れんな。
経済的な敵である日本を倒すため、オートリピートなんてそもそも不要なIMEのON/OFF
キーに普通のアルファベットキーよりも開始時間の短いオートリピート機能を付けた
上に、現在のON/OFF状態を画面の右下の分かりにくい場所に小さく表示したりとか
と同じで。
経済的な敵である日本を倒すため、オートリピートなんてそもそも不要なIMEのON/OFF
キーに普通のアルファベットキーよりも開始時間の短いオートリピート機能を付けた
上に、現在のON/OFF状態を画面の右下の分かりにくい場所に小さく表示したりとか
と同じで。
813デフォルトの名無しさん
2021/08/28(土) 15:17:42.31ID:Wn50/Mou そして悪徳へ
814デフォルトの名無しさん
2021/08/28(土) 17:32:49.86ID:nCwHwokI >>794
スレタイ3回音読してからごめんなさいは?
スレタイ3回音読してからごめんなさいは?
815ハノン ◆QZaw55cn4c
2021/08/28(土) 18:09:30.98 ワンワンワンごめんなさい
816デフォルトの名無しさん
2021/08/29(日) 01:17:36.66ID:MsJ8kGio どうでもいいけどオリパラのRPCはリモートプロシージャコールじゃなくてなんちゃってロシア
まめな
まめな
817デフォルトの名無しさん
2021/09/06(月) 20:30:01.34ID:d5h9Y6Qi フフフフフ…で埋められたWin32アプリデバッグメモリを思い出した人、どのくらいいるかな
「フフフ…」4歳娘が撮影した花火に家族で爆笑! 見ると笑顔になる“奇跡の1枚”の状況を父親に聞いた | FNNプライムオンライン
https://www.fnn.jp/articles/-/224754
「フフフ…」4歳娘が撮影した花火に家族で爆笑! 見ると笑顔になる“奇跡の1枚”の状況を父親に聞いた | FNNプライムオンライン
https://www.fnn.jp/articles/-/224754
818デフォルトの名無しさん
2021/09/06(月) 20:54:15.47ID:q0BBk2oV 0xABADBABE がwindows7のUSB
0xBAADF00D がlocal alloc
深淵に到達するとフフフじゃないのよ
0xBAADF00D がlocal alloc
深淵に到達するとフフフじゃないのよ
819デフォルトの名無しさん
2021/09/09(木) 19:55:16.63ID:VcdPV4nP カカカ
820デフォルトの名無しさん
2021/09/10(金) 06:52:10.21ID:zxx6HeQ0 六歌仙のひとり
821デフォルトの名無しさん
2021/09/10(金) 11:54:52.84ID:kc5oWHp5 Debugモードで実行すると配列の中身が「フフフノフフフ」になってワロタ
822デフォルトの名無しさん
2021/09/10(金) 11:56:22.34ID:2Fxd4w67 16進数で表示して英語で読んでみ
823デフォルトの名無しさん
2021/09/11(土) 21:33:34.97ID:x2ZLDQix INT3
824デフォルトの名無しさん
2021/09/11(土) 23:15:17.42ID:EO9owr6G dabadabada
825デフォルトの名無しさん
2021/09/15(水) 09:50:59.74ID:5Dhe4KoF HANDLE SetClipboardData(UINT uFormat, HANDLE hMem);
に渡すhMemは必ずGlobalAllocで確保したものでなくてはいけないのでしょうか?
mallocやnewやスタック領域のポインタを渡すとどうなるんでしょうか・・・?
に渡すhMemは必ずGlobalAllocで確保したものでなくてはいけないのでしょうか?
mallocやnewやスタック領域のポインタを渡すとどうなるんでしょうか・・・?
826デフォルトの名無しさん
2021/09/15(水) 12:24:45.10ID:SFBdYzCp >>825
渡すのはポインタではなくハンドルやぞ
渡すのはポインタではなくハンドルやぞ
827デフォルトの名無しさん
2021/09/15(水) 12:43:50.08ID:LR7HEnPp828デフォルトの名無しさん
2021/09/15(水) 12:49:21.43ID:iNVe1A73 >>827
スタックはスレッド単位あるね
スタックはスレッド単位あるね
829デフォルトの名無しさん
2021/09/15(水) 12:51:46.74ID:LR7HEnPp >>828
あぁプロセスを跨がないって言った方がよかったな
あぁプロセスを跨がないって言った方がよかったな
830デフォルトの名無しさん
2021/09/15(水) 13:39:40.30ID:5Dhe4KoF831デフォルトの名無しさん
2021/09/15(水) 14:21:18.54ID:SFBdYzCp >>830
GlobalAllocと言っても引数に渡すオプションで変わるぞ
GMEM_FIXEDを渡せばプロセス単位でアクセス可能なメモリ(プロセスを超えてアクセスはできない)
GMEM_MOVEABLEを渡すとプロセスを超えて使用できるハンドルが返る
この時点でプロセスのメモリ領域はまだ確保されていない
その後GlobalLockによってプロセスのメモリ空間にマップされる
>SetClipboardDataでOS管理化のバッファに渡される
SetClipboardDataに渡すのはハンドルであってメモリじゃない
言い換えると、システム(クリップボード)は渡されたハンドルの複製を作ってそれを保持するだけ
ハンドルが示すリソースには参照カウンタがあって、すべてのハンドルが閉じて初めて解放される
つまりGlobalAlloc、GlobalFreeでプロセスがハンドルを閉じても、クリップボードに渡されたハンドルが生きているからデータを維持し続ける
新たにクリップボードにコピーや切り取りをするとそれまでの複製されたハンドルを閉じるので参照カウンタが0になり実際に開放されることになる
>(CloseClipboardするまでフラッシュはされない?)
GlobalUnockをした時点で書き込まれたデータはハンドルさえ知っていれば誰でもアクセスできる状況にある
言い換えると「フラッシュされるタイミング」はGlobalUnockしたときと言えるだろう
ただしCloseClipboardすることで「ハンドルの複製」が確実に行われるということではある
プロセスはCloseClipboardを呼び出す前に渡したハンドルの開放を行うべきではないと書かれている
(これはシステムがハンドルの複製する前にプロセスが元のハンドルを解放して参照カウンタが0になってしまいデータそのものが解放されるのを防ぐためだろう)
GlobalAllocと言っても引数に渡すオプションで変わるぞ
GMEM_FIXEDを渡せばプロセス単位でアクセス可能なメモリ(プロセスを超えてアクセスはできない)
GMEM_MOVEABLEを渡すとプロセスを超えて使用できるハンドルが返る
この時点でプロセスのメモリ領域はまだ確保されていない
その後GlobalLockによってプロセスのメモリ空間にマップされる
>SetClipboardDataでOS管理化のバッファに渡される
SetClipboardDataに渡すのはハンドルであってメモリじゃない
言い換えると、システム(クリップボード)は渡されたハンドルの複製を作ってそれを保持するだけ
ハンドルが示すリソースには参照カウンタがあって、すべてのハンドルが閉じて初めて解放される
つまりGlobalAlloc、GlobalFreeでプロセスがハンドルを閉じても、クリップボードに渡されたハンドルが生きているからデータを維持し続ける
新たにクリップボードにコピーや切り取りをするとそれまでの複製されたハンドルを閉じるので参照カウンタが0になり実際に開放されることになる
>(CloseClipboardするまでフラッシュはされない?)
GlobalUnockをした時点で書き込まれたデータはハンドルさえ知っていれば誰でもアクセスできる状況にある
言い換えると「フラッシュされるタイミング」はGlobalUnockしたときと言えるだろう
ただしCloseClipboardすることで「ハンドルの複製」が確実に行われるということではある
プロセスはCloseClipboardを呼び出す前に渡したハンドルの開放を行うべきではないと書かれている
(これはシステムがハンドルの複製する前にプロセスが元のハンドルを解放して参照カウンタが0になってしまいデータそのものが解放されるのを防ぐためだろう)
832デフォルトの名無しさん
2021/09/15(水) 14:22:39.60ID:SFBdYzCp 訂正
× つまりGlobalAlloc、GlobalFreeでプロセスがハンドルを閉じても、
〇 つまりGlobalFreeでプロセスがハンドルを閉じても、
× つまりGlobalAlloc、GlobalFreeでプロセスがハンドルを閉じても、
〇 つまりGlobalFreeでプロセスがハンドルを閉じても、
833デフォルトの名無しさん
2021/09/15(水) 14:54:01.66ID:+suq2kti クリップボードを使うときGlobalAllocで割り当てたメモリは解放しなくていいって聞くけど
クリップボードを経由せずにHGLOBAL値を他のプロセスに渡してもGlobalLockでアクセスできないよな
ということはクリップボードもメモリオブジェクトそのものをムーブしているのではなく実はコピーしてるだけ?
だったら貼り付けた側でもGlobalFreeすべきなのかな
クリップボードを経由せずにHGLOBAL値を他のプロセスに渡してもGlobalLockでアクセスできないよな
ということはクリップボードもメモリオブジェクトそのものをムーブしているのではなく実はコピーしてるだけ?
だったら貼り付けた側でもGlobalFreeすべきなのかな
834デフォルトの名無しさん
2021/09/15(水) 14:55:37.48ID:SFBdYzCp835デフォルトの名無しさん
2021/09/15(水) 15:21:21.14ID:+suq2kti さっきやってみたらできなかった
実験のやり方がまずいのかな
実験のやり方がまずいのかな
836デフォルトの名無しさん
2021/09/15(水) 15:22:27.17ID:+suq2kti FileMappingより簡単な方法があるのかと期待したんだけど
837デフォルトの名無しさん
2021/09/15(水) 15:32:27.38ID:iNVe1A73 win16apiと混ざってないか?
838デフォルトの名無しさん
2021/09/15(水) 15:33:50.71ID:+suq2kti 32だとGlobalFreeすべきってなってる?
839デフォルトの名無しさん
2021/09/15(水) 15:39:39.86ID:5Dhe4KoF >>833
GlobalAllocしたプロセスを閉じた後もちゃんとクリップボード内のデータは残るのと
SetClipboardData → CloseClipboard → GlobalFreeという非公式な手順でFreeをした後もちゃんとクリップボード内のデータは残るため、あくまで実データはOS側へコピーされているという認識でした
メモリビューアで眺めた感じだと成功した後にGlobalFreeを行わなくても、
GlobalAlloc(GMEM_MOVEABLE, size)の戻り値->、GlobalLockの戻り値->共に該当アドレスへ別データ上書きは確認されたので、ちゃんと解放されているものと思われます
GlobalAllocしたプロセスを閉じた後もちゃんとクリップボード内のデータは残るのと
SetClipboardData → CloseClipboard → GlobalFreeという非公式な手順でFreeをした後もちゃんとクリップボード内のデータは残るため、あくまで実データはOS側へコピーされているという認識でした
メモリビューアで眺めた感じだと成功した後にGlobalFreeを行わなくても、
GlobalAlloc(GMEM_MOVEABLE, size)の戻り値->、GlobalLockの戻り値->共に該当アドレスへ別データ上書きは確認されたので、ちゃんと解放されているものと思われます
840デフォルトの名無しさん
2021/09/15(水) 15:45:35.08ID:LR7HEnPp https://docs.microsoft.com/ja-jp/windows/win32/api/winuser/nf-winuser-setclipboarddata
> The application may not write to or free the data once ownership has been transferred to the system
ないね
> The application may not write to or free the data once ownership has been transferred to the system
ないね
841デフォルトの名無しさん
2021/09/15(水) 15:46:32.86ID:zA2ywaMe SetClipboardData の第一引数は CF_PRIVATEFIRST + 定数 だったりするのかな
842デフォルトの名無しさん
2021/09/15(水) 15:46:35.24ID:+suq2kti なるほど
クリップボードがメモリオブジェクトをGlobalFreeしているので
アプリ側でGlobalFreeすると二重解放になるのは
ムーブかコピーかによらないってことか
クリップボードがメモリオブジェクトをGlobalFreeしているので
アプリ側でGlobalFreeすると二重解放になるのは
ムーブかコピーかによらないってことか
843デフォルトの名無しさん
2021/09/15(水) 15:56:39.26ID:iNVe1A73 「メモリ割り当て方法の比較」という
MicroSoftの資料を一読したら?
GlobalAlloc はHeapAllocのラッパ
MicroSoftの資料を一読したら?
GlobalAlloc はHeapAllocのラッパ
844デフォルトの名無しさん
2021/09/15(水) 16:10:58.96ID:MM/6t6np ヒップホップ
845デフォルトの名無しさん
2021/09/15(水) 23:17:32.21ID:qRxK7g6Y Win16の頃のドキドキひやひや感が無くなったよな
846デフォルトの名無しさん
2021/09/16(木) 02:35:41.36ID:fi5zSZqt せやな
847833
2021/09/16(木) 07:33:53.55ID:T1nJe1PW 礼を言ってなかった
みんな、ありがとう
みんな、ありがとう
848デフォルトの名無しさん
2021/09/18(土) 08:35:19.11ID:bA/qQPAi849デフォルトの名無しさん
2021/09/18(土) 21:23:52.02ID:YYDlQyy6 ?
850デフォルトの名無しさん
2021/09/18(土) 21:25:09.62ID:7htd6rFv ??
851デフォルトの名無しさん
2021/09/20(月) 12:21:13.96ID:rmuhdvcF 馬鹿はこっち来んな
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★4 [ぐれ★]
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 毒親「働かないでいつもゴロゴロして!」俺「…」毒親「あっ近隣に熊が出たって!」俺「ふぅ」毒親「どこ行くんだ」
- アンケート調査で「高市発言は問題なし」 93.5%wwwwwwwwwwwwwwwwwwwwwwwww [279254606]
- 生活保護の受給額ってなんでこんなに安いの?
- お前らは“スカイマイルタワー”建設計画を知っているか?
- これ誰か分かるか?
- 支払い詰まってインターネット止まった
