★初心者にVisual C++を教えるスレ★ Part38
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2011/11/03(木) 00:54:48.61お兄ちゃんお姉ちゃん達が優しく、時には厳しく回答してくれるスレッドです。
■質問するにあたって
・エラーや警告のときはエラーメッセージを書きましょう。
・開発環境も書きましょう、特にWindowsForm、MFC、Win32アプリケーションの区別。
・できるだけ具体的に。
質問の仕方については次のページが大変参考になります。
http://www.hyuki.com/writing/techask.html
■回答するにあたって
・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。
(MSDNのどの項目だとか、何のキーワードでGoogleするとか)
・ネタや煽りは軽く流しましょう。
【過去スレ】
Part37 http://hibari.2ch.net/test/read.cgi/tech/1299982561/
Part36 ttp://hibari.2ch.net/test/read.cgi/tech/1273939582/
Part35 ttp://pc12.2ch.net/test/read.cgi/tech/1256645713/
Part34 ttp://pc12.2ch.net/test/read.cgi/tech/1245382769/
Part33 ttp://pc12.2ch.net/test/read.cgi/tech/1235292263/
0472デフォルトの名無しさん
2012/08/23(木) 01:33:38.730473デフォルトの名無しさん
2012/08/23(木) 17:51:53.90ありがとうございました
0474デフォルトの名無しさん
2012/08/26(日) 21:06:18.92XP以前ならクラシックスタイル
XPならXPスタイル
VistaならVistaスタイル
7なら7スタイル
で表示するようにするにはどうすればいいですか?
それぞれ別の設定でビルドするしかないですか?
0475デフォルトの名無しさん
2012/08/26(日) 21:52:41.140476デフォルトの名無しさん
2012/08/26(日) 22:45:28.41ありがとうございました
0477デフォルトの名無しさん
2012/08/26(日) 22:56:28.91<assemblyIdentity
・・・
name="この部分"
・・・
/>
<description>この部分</description>
タスクマネージャのプロセスタブにある「説明」の欄に表示されたり
プロパティでは表示されないみたいですが
また別物なんですか?
0478デフォルトの名無しさん
2012/08/26(日) 23:04:24.060479デフォルトの名無しさん
2012/08/26(日) 23:42:01.08内部で使用されるだけなんですね
0480デフォルトの名無しさん
2012/08/27(月) 00:43:56.58ソース上だと#defineで分岐するとビルド時のシステムに搭載されているCPUを気にしなくてもいいのですが
.xml上で自動で搭載されているCPUに合った値を使用する方法はありますか?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
またOSによってビジュアルスタイルが変わると思うのですが
dllを読み込むのだからOSが使用できるビジュアルスタイルが自動的に描画される
という認識であってますか?
0481デフォルトの名無しさん
2012/09/04(火) 01:45:17.53ダイアログにはリストボックスがあり、スレッドの中でリストボックスにアイテムを追加したいと考えています。
MFCを使用しています。スレッドは_beginThreadで呼び出しています。
リストボックスのオブジェクトを取得するために以下のようにして取得をしたいと考えています。
CListBox* List = (CListBox*)GetDlgItem(リストボックスのID);
この処理はダイアログ::OnInitDialog()のような継承を行った部分の中では問題なく使用できるのを確認したのですが、
これを使ってスレッド内でオブジェクトを取得するにはどうしたらいいか悩んでいます。
スレッドは以下のような関数を呼び出しています。
void Thread(void* p){
//処理
}
スレッドの中でリストボックスのオブジェクトを取得してリストボックスにアイテムを追加する方法の知恵を授けては頂けませんでしょうか
0482デフォルトの名無しさん
2012/09/04(火) 01:47:56.440483デフォルトの名無しさん
2012/09/04(火) 02:05:55.94なるほど
先にCListBox* List = (CListBox*)GetDlgItem(リストボックスのID);として
_beginThread(Thread,0,List);のように引数にListを渡すということでしょうか?
この考え方が間違ってたら申し訳ありません。
0484デフォルトの名無しさん
2012/09/04(火) 02:10:28.960485デフォルトの名無しさん
2012/09/04(火) 02:21:04.38それだと複数引数で渡したい場合は構造体にでも入れて渡せば問題なさそうです。
回答ありがとうございます。非常に助かりました。
0486デフォルトの名無しさん
2012/09/04(火) 21:56:06.00そもそもワーカースレッドの中で画面アイテムの更新て出来たっけ?
そう言う場合、リストボックスに入れるデータを格納したバッファなりを作って、スレッドではそこにデータを格納。
続けてウィンドウメッセージかなにかでウィンドウにメッセージを送ってメインスレッド(て言うんだっけ)でリストを更新、
て流れでいつも作ってた。
0487デフォルトの名無しさん
2012/09/04(火) 22:20:13.570488デフォルトの名無しさん
2012/09/05(水) 11:30:23.73Photoshop CS5のプラグインを作りたくて
Visual Studio 2010 Express (C++)をインストールして
次に、
PhotoshopCS5 SDK(forWindows)
ttp://www.adobe.com/devnet/photoshop/sdk.html
をダウンロード
試しにサンプルでもと思い。
「\adobe_photoshop_cs5_sdk_win\pluginsdk\samplecode\selection\selectoramashape\win」内の
「SelectoramaShape.vcproj」をダブルクリック!!
VS「変換ウィザードへようこそ」???→なんか知らんが、完了!
VS「変換中にエラーがあったよ」→閉じる。。。
ソリューションファイルからならイケる!(ってどっかのサイトに書いてあった)
VS「変換ウィザード。。。。
みたいな事になってます。
環境はWindows7で
変換レポートの中のエラーは
「Converting project file '***\SelectoramaShape.vcproj'Failed to upgrade platform 'x64'. Please make sure you have it installed under '%vctargetspath%\platforms\x64'
VCWebServiceProxyGeneratorTool is no longer supported. The tool has been removed from your project settings.
Attribute 'Detect64BitPortabilityProblems' of 'VCCLCompilerTool' is not supported in this version and has been removed during conversion.
Failed to upgrade 'Debug|x64'. Please make sure you have the corresponding platform installed under '%vctargetspath%\platforms\x64'
The project configuration dimension name/value "(Platform, Win32)" was not found in the project manifest.
プロジェクトはアップグレードに失敗しました。
」です。
お願いします。助けて下さい。
0489デフォルトの名無しさん
2012/09/05(水) 11:51:15.84環境は64bit?
そのVC++はSDK追加して64bitコンパイルできるようにしてる?
0490デフォルトの名無しさん
2012/09/05(水) 11:54:32.792010用に書き換えるか、とりあえず2008で試してみては
0491sage
2012/09/05(水) 12:07:50.84>>490
なるほど。そういうことだったんですね。
ちょっと2008インスコしてきます。
2008も64bitコンパイルできるように設定しないとだめっすか?
0492デフォルトの名無しさん
2012/09/05(水) 12:21:23.20あとx64使えるようにするのは2008は面倒だよ。
そのエラーが出てプロジェクト開けないの?
開けてるならWin32のみ使えばいいんで問題ないと思うけど。
0493デフォルトの名無しさん
2012/09/05(水) 12:49:22.38あやうく2010消すとこでした。^^;
エラーが出てプロジェクトが開けないんです。
左のソリューションエクスプローラーに
・SelectoramaShape(利用不可)
プロジェクト ファイルはアンロードされました。
みたいな感じで表示されてます。
0494デフォルトの名無しさん
2012/09/05(水) 12:52:48.98ググって試してみりゃいい。
あとvcprojをテキストエディタで開いてx64のブロック消すとか
0495デフォルトの名無しさん
2012/09/05(水) 14:00:07.48VC++2008で64bitでビルド実行できるようになって、その後2010で使いたいなら
2008を残したまま2010インストール
→2010で64bitビルド実行できるようにする(テストプログラムでも作って確認)
→2010でSelectoramaShape?のソリューションを開く
→ウィザード変換
→プロジェクトのプロパティ->構成プロパティ->全般->プラットフォーム ツールセットv90でリビルド
→エラー無し確認後v90をv100にしてリビルド
→エラー無し確認
これで以降はVC++2010のみで管理可能になると思う
0496デフォルトの名無しさん
2012/09/05(水) 16:37:05.62__declspec(noinline) void __stdcall foo1(FOO h){
printf("%d %x %d %s", h.a, h.b, h.c, h.d);
}
__declspec(noinline) void __stdcall foo2(int a, int *b, long c, char *d){
printf("%d %x %d %s", a, b, c, d);
}
typedef void (__stdcall *FOO1)(FOO);
typedef void (__stdcall *FOO2)(int, void *, long, char *);
int _tmain(int argc, _TCHAR* argv[]){
FOO h = { 6, &h.a, 8, "abc", };
foo1(h);
((FOO1)foo2)(h);
foo2(h.a, h.b, h.c, h.d);
((FOO2)foo1)(h.a, h.b, h.c, h.d);
return 0;
}
最適化するとfoo2はfoo1と同じと見なされ、消えてしまいました。
しかし、呼び出し方は全く異なります。
foo2はpushで引数を入れていますが、
foo1はスタックポインタを進めて、全部movしていました。
するとfoo1は呼び出しコストが高くなるので
FOO2にキャストしてから呼んでみたところ
foo2と同じようにpushで引数を入れてくれました。
このような、引数と構造体の置き換えは、
アライメントが違ったり、浮動小数が入っていると
できない場合もあると思いますが、他にできないパターンが
あったら教えてください。
0497デフォルトの名無しさん
2012/09/06(木) 04:13:40.82え? 逆じゃないの?
プッシュはmuvより複雑で面倒な命令だから、実行時間が長くなるんじゃない?
試しに何回も呼び出しを繰り返させて実行時間を計ってみ?
0498デフォルトの名無しさん
2012/09/06(木) 11:03:53.54>え? 逆じゃないの?
>プッシュはmuvより複雑で面倒な命令だから、実行時間が長くなるんじゃない?
すみません、おっしゃる通りでした。
以下のようにベンチしたところ、若干foo1呼び出しの方が速かったです。
http://ideone.com/2rTrd
コードが明らかに長くなるので、それだけ見て勘違いしておりました。
となると、サイズより速度を優先する最適化で、pushをmovに置き換える
コードが生成されないのはなぜですか?
また、((FOO1)foo2)(h);の行が入っていない場合、
foo2はfoo1に統合されませんでした。
しかも、関数自体はfoo1より、統合されないfoo2の方が速かったです。
謎だらけです。
0499デフォルトの名無しさん
2012/09/06(木) 14:08:24.61>>495
ありがとうございます。
なんとかできました。
できたはできたんですが、
自分が作りたかったプラグインはすでに存在してました orz
0500デフォルトの名無しさん
2012/09/06(木) 15:42:04.15呼び出し時に構造体から変数に置き換えるか、関数内で置き換えるかの違いかと。
0501デフォルトの名無しさん
2012/09/06(木) 15:59:16.260502デフォルトの名無しさん
2012/09/06(木) 16:20:31.700503デフォルトの名無しさん
2012/09/06(木) 21:38:56.41関数内では構造体使わない方が速い
グローバル構造体宣言して使いまわすとか無しな
0504デフォルトの名無しさん
2012/09/07(金) 14:46:45.00time_t time = time(NULL);
struct tm *ptime = localtime(&time);
として、YYYYMMやMM:DDのような書式にあわせた日付を取得する方法としてどのような方法があるのでしょうか?
YYYYと書式を設定したら2012、YYYY/MMと設定したら2012/09のようになるイメージです。
0505デフォルトの名無しさん
2012/09/07(金) 16:52:48.330506デフォルトの名無しさん
2012/09/07(金) 16:55:36.66つ ttp://msdn.microsoft.com/ja-jp/library/fe06s4ak%28v=vs.90%29.aspx
0507デフォルトの名無しさん
2012/09/09(日) 04:03:06.58フィルタの振り分けとか
Main
->main.cpp
->main.h
ProjectName
->ProjectName.cpp
->ProjectName.h
自作外部ファイル用
->FileName1.cpp
->FileName1.h
->etc
こんな感じ?
0508デフォルトの名無しさん
2012/09/09(日) 13:41:30.090509デフォルトの名無しさん
2012/09/10(月) 09:34:58.52>>505 >>506
こんな関数があったんですね。わざわざURLまで貼っていただいてありがとうございます。
0510デフォルトの名無しさん
2012/09/11(火) 21:03:25.31UDP通信の簡単なアプリケーションを作成中なのですが、
recvfrom()を実行するとデータを受信するまで終了できませんです。
0511デフォルトの名無しさん
2012/09/11(火) 21:09:48.750512デフォルトの名無しさん
2012/09/11(火) 22:12:18.61混合型はサポートされていませんと出ます。
どうすればいいですか?
0513デフォルトの名無しさん
2012/09/11(火) 22:47:17.96C#を使う->正解
0514デフォルトの名無しさん
2012/09/13(木) 17:53:59.24ソフトがクラッシュすると、デッバッグが起動するんですけど
これを解除するにはどうすればいい?
0515デフォルトの名無しさん
2012/09/13(木) 21:35:37.48標準デバッガの設定だな。
XP以前だったらDrワトソンを標準デバッガに設定し直せば良い。
drwtsn32.exe -i
だったかな。いま7だから試せんわ。
もしOSがVISTA以降だったら、そもそもDrワトソンが無いので、レジストリの
HKEY_LOCALMACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\AeDebug
を弄れは良い。
見て想像は付くと思うが、解らんかったらググれ。
0516デフォルトの名無しさん
2012/09/13(木) 21:40:19.12VC++6.0を使用してtry catchで例外処理をしているのですが、VC++6.0ではVBのようにexceptionのような色々なエラーをキャッチできて、
詳細なエラーメッセージを取得することができる手段はないのでしょうか?
0517デフォルトの名無しさん
2012/09/13(木) 21:52:41.370518デフォルトの名無しさん
2012/09/13(木) 21:59:51.790519デフォルトの名無しさん
2012/09/13(木) 22:36:46.06なにこれ??使いにくいぃぃぃいいいいい!!
皆さん使ってますか??
0520デフォルトの名無しさん
2012/09/13(木) 22:37:29.82error C4368: cannot define '_test_main' as a member of managed 'NAMAI::Form1': mixed types are not supported
error C2678: binary '=' : no operator found which takes a left-hand operand of type 'NAMAI::TEST_main' (or there is no acceptable conversion)
could be 'NAMAI::TEST_main &NAMAI::TEST_main::operator =(const NAMAI::TEST_main &)' while trying to match the argument list '(NAMAI::TEST_main, NAMAI::TEST_main *)'
別ファイルのTEST_mainをフォーム1で生成したいのですが、エラーの解決方法を教えていただけないでしょうか。
よろしくお願いします。
>>HOGE.h
namespace NAMAI
{
class TEST_main { public: void TEST(void); };
}
>>Form1.h
#pragma once
#include "HOGE.h"
namespace NAMAI {
public ref class Form1 : public System::Windows::Forms::Form
{
public:
TEST_main _test_main;
Form1(void){
InitializeComponent();
InitializeTEST();
}
void InitializeTEST() { _test_main = new TEST_main; }
};
}
0521デフォルトの名無しさん
2012/09/13(木) 23:07:34.350522デフォルトの名無しさん
2012/09/17(月) 17:23:05.36じゃあなんあのさぁああああああああああああ!!!!!
0523デフォルトの名無しさん
2012/09/17(月) 17:36:08.090524デフォルトの名無しさん
2012/09/23(日) 03:01:33.57malloc/freeでfree忘れを検知するだけでいい
それができたらそこにGetDC/ReleaseDCとかも判定できるようにしようと思ってんだけど
0525デフォルトの名無しさん
2012/09/24(月) 18:07:31.98彼女が出来ません、どうしたら良いですか
0526デフォルトの名無しさん
2012/09/24(月) 18:17:35.730527片山博文MZボット ◆0lBZNi.Q7evd
2012/09/24(月) 18:59:17.08プリプロセッサーでフック。
#define malloc mymalloc
...
atexit関数かstaticオブジェクトのデストラクタでチェック。
0528デフォルトの名無しさん
2012/09/24(月) 19:10:38.890529デフォルトの名無しさん
2012/09/24(月) 19:56:58.97{} の後ろに ; が要らないのはなぜですか?
たとえば
class Hoge {
int a;
public:
Hoge() : a(0) {};
~Hoge() {};
void Hage(void);
void Fuga(void) {a=1;};
};
みたいなとき
class Hoge {
int a;
public:
Hoge() : a(0) {}
~Hoge() {}
void Hage(void);
void Fuga(void) {a=1;}
};
で良いんですよね?
だとすると逆に
void Hage(void)
で怒られるのも謎
0530デフォルトの名無しさん
2012/09/24(月) 20:02:56.430531デフォルトの名無しさん
2012/09/24(月) 20:04:29.16関数書くときもいらないだろ
いつもわざわざ
void func() { };って書いてたのか?
0532デフォルトの名無しさん
2012/09/24(月) 20:06:53.190533デフォルトの名無しさん
2012/09/24(月) 20:08:11.700534デフォルトの名無しさん
2012/09/24(月) 20:08:28.470535デフォルトの名無しさん
2012/09/25(火) 21:35:14.700536デフォルトの名無しさん
2012/09/25(火) 22:24:58.02断食で煩悩を断ってください
0537デフォルトの名無しさん
2012/09/25(火) 23:31:20.62興味のあるライブラリをさわってみる
サンプルをうごかしてみる
ちょっと変更してうごかしてみる
0538デフォルトの名無しさん
2012/09/25(火) 23:44:32.53やっぱり普通に言語の勉強するよりも動かしたほうがいいんですね
0539デフォルトの名無しさん
2012/09/26(水) 08:21:09.71って書き方してるソースも見たことあるわ
0540デフォルトの名無しさん
2012/09/26(水) 13:29:08.57そのポインタの値がNULLかどうかチェックする必要はありますか?
具体的には、
try{
do something;
}
catch(char *hoge){
printf("received exception: %s", hoge);
}
としたい場合、
catch(char *hoge){
if(hoge){
printf("received exception: %s", hoge);
}
}
と書くべきかどうかです。
この場合は throw してる側で hoge が動的か静的かで違うと思いますが、
動的に hoge が生成されるような場合についてです。
0541デフォルトの名無しさん
2012/09/26(水) 13:31:52.59誤 received exception
正 caught exception
0542デフォルトの名無しさん
2012/09/26(水) 13:55:26.100543デフォルトの名無しさん
2012/09/26(水) 14:03:10.45既に別の例外が発生しているか
強制終了されている状況じゃないかな
0544デフォルトの名無しさん
2012/09/26(水) 14:45:04.26それよりお前
delete hoge;
し忘れてるぞ
0545デフォルトの名無しさん
2012/09/26(水) 21:26:41.46>>540
それって状況によるかも知れないから、どうしても心配ならこんな風に書いたりすることもある。
まあこれもどうでもいいかもしれんが。
printf("received exception: %s", hoge == NULL ? "NULL" : hoge );
0546デフォルトの名無しさん
2012/09/26(水) 23:34:50.18http://msdn.microsoft.com/ja-jp/library/9yb4317s.aspx
に書かれている通り行ったのですが、試しに sizeof(void*) を出力させたところ 4 となりました
これは通常だと8となるはずなのですがどうなのでしょう
0547デフォルトの名無しさん
2012/09/26(水) 23:58:08.730548デフォルトの名無しさん
2012/09/26(水) 23:59:56.26どうやって設定するのですか
0549デフォルトの名無しさん
2012/09/27(木) 09:59:33.250550デフォルトの名無しさん
2012/09/28(金) 19:51:36.48ありがとう
0551デフォルトの名無しさん
2012/09/29(土) 10:04:12.90VisualStudio 2010 で C++ を使い、Win32 アプリを作っています。
アプリ実行時に、IDE 上に任意のログを出力する機能ってありますでしょうか?
やりたいのは、Eclipse / Android 開発で、Log.e を Logcat で捕まえるようなものです。
リアルタイムで実行状況を確認したいときに使いたいです。
0552デフォルトの名無しさん
2012/09/29(土) 10:17:37.470553551
2012/09/29(土) 10:47:50.910554デフォルトの名無しさん
2012/10/01(月) 02:46:20.20Vistaや7のAeroのGUIで、ボタンにカーソルを合わせると徐々に青っぽくなって
カーソルをはずすと、また元に戻っていくようなアニメーションっぽいのを
やりたいんですが、この処理は自分でタイマー使ってやる以外に方法はありますか?
0555デフォルトの名無しさん
2012/10/01(月) 04:51:11.160556デフォルトの名無しさん
2012/10/05(金) 12:04:40.080557片山博文MZボット ◆0lBZNi.Q7evd
2012/10/05(金) 16:16:50.27printf("%.*s\n", 4, "TESTTEST"); // TESTと表示。
0558デフォルトの名無しさん
2012/10/05(金) 19:29:48.17やさしさ乙
0559デフォルトの名無しさん
2012/10/05(金) 20:13:25.320560デフォルトの名無しさん
2012/10/05(金) 20:17:05.380561デフォルトの名無しさん
2012/10/05(金) 20:37:52.16hogehoge;
}
これだとバグ出るよね
0562デフォルトの名無しさん
2012/10/05(金) 21:19:10.75sizeof(buffer) / sizeof(buffer[0])かポインタでなければ_countof(buffer)がいい
0563デフォルトの名無しさん
2012/10/06(土) 16:03:54.56これって buffer が配列じゃなくてポインタのときは駄目じゃない?
0564デフォルトの名無しさん
2012/10/06(土) 16:48:03.890565デフォルトの名無しさん
2012/10/06(土) 16:52:19.50printf("%d", _countof(buffer));
0566デフォルトの名無しさん
2012/10/06(土) 16:58:29.23ちゃんとコンパイルエラーになるから大丈夫
0567デフォルトの名無しさん
2012/10/06(土) 17:14:27.83○ sizeof(buffer) / sizeof(buffer[0])
○ _countof(buffer)
char *buffer = (char*)malloc(sizeof(char) * N);
× sizeof(buffer) / sizeof(buffer[0])
× _countof(buffer)
○ int size = sizeof(char) * N;
0568デフォルトの名無しさん
2012/10/06(土) 17:17:14.26コンパイルエラー出すための仕組みなんか
誤解してたわ
0569デフォルトの名無しさん
2012/10/06(土) 17:25:52.36× sizeof(buffer) / sizeof(buffer[0]) // コンパイルエラーにならなくて実行時誤動作
× _countof(buffer) // コンパイルエラーになるから大丈夫
0570デフォルトの名無しさん
2012/10/07(日) 01:23:43.90次のエラーが解決できず、かなり苦労しています
LINK : fatal error LNK1104: ファイル 'glut32.lib' を開くことができません。
調べてでてきた
・glut32.dllを"C:\Windows\System32"に入れる
・glut32.dllを"〜〜.vcproj"と同じフォルダに入れる
・プロジェクト→既存項目を追加→glut32.dllを選択
をすべて試してみたのですが、エラーが消えません・・・
環境はVisual C++ 2008、Windows7の64bit、プロジェクト自体は"Win32"です。
どうかよろしくお願いします・・・
0571デフォルトの名無しさん
2012/10/07(日) 01:56:52.250572デフォルトの名無しさん
2012/10/07(日) 01:59:53.67■ このスレッドは過去ログ倉庫に格納されています