★初心者にVisual C++を教えるスレ★ Part35at TECH
★初心者にVisual C++を教えるスレ★ Part35 - 暇つぶし2ch39:デフォルトの名無しさん
09/10/30 11:47:17
int型の単純な代入文ですら発生します。

40:デフォルトの名無しさん
09/10/30 11:51:43
>>39
>37? だとしたら、動作環境が劣悪なんじゃないの? 特にメモリ容量辺りを見直すべし。

41:デフォルトの名無しさん
09/10/30 11:56:20
メモリは2GBなんですが・・・
仮想メモリというか、ページファイルも含めれば十分にあると思います。

42:デフォルトの名無しさん
09/10/30 12:12:12
XPたまにそういうことあるなあ
OS入れなおしで直ったが・・・

43:デフォルトの名無しさん
09/11/01 22:10:51
リリース版の作り方を教えてください

44:43
09/11/01 22:23:50
URLリンク(funini.com)を見て設定してみましたが、
「プリコンパイル済みヘッダーがありません」というのが
#include "stdafx.h" を書いていっても消えません

45:43
09/11/01 22:31:14
「プリコンパイル済みヘッダを使用しない」で解決しました
VC++ 2008 Express Editionでした

46:デフォルトの名無しさん
09/11/02 08:59:08
Visual C++ プログラマだと思い込んでいる、
ただの Visual C++ ユーザー、Visual Studio ユーザー
って多いよね。
プログラマではなく、ただの統合環境(IDE)ユーザーでしかない人。

IDEをそれなりに使いこなして、アプリっぽいものを作れる人と、
IDEがあってもなくても、アプリをガツガツ組める人とは
雲泥の差がある。


47:デフォルトの名無しさん
09/11/02 09:55:35
使いこなして無い奴のが多くないか?
デバッガ使える環境なのに使わないとかありえんだろ。
検索と同じように、コツというものはあるけどな

48:デフォルトの名無しさん
09/11/02 11:20:14
プログラミング自体始めてのやつもいれば
VCは初心者だけど他で経験あるやつ
万年初心者のやつ
初心者といってもいろいろだろ

49:デフォルトの名無しさん
09/11/02 11:22:18
いつもコマンドライン使ってるから
IDEの使い方は必要最小限しか知らない

50:デフォルトの名無しさん
09/11/04 13:00:07
GetGlyphOutlineという関数をループ中で
size = GetGlyphOutline(hdc, str[i], GGO_GRAY4_BITMAP, &gm, 0, NULL, &Mat );
こんな感じで使っているのですが、この関数の戻り値がループの初回は460で二回目は0xFFFFFFになります
それぞれの引数を初期化したり定数にしてみたりしましたが変わりません
この関数が0xFFFFFFを返すというのはどういう状況なんでしょうか

51:デフォルトの名無しさん
09/11/04 13:29:51
>>50
MSDNによると、
--
戻り値
フラグ GGO_BITMAP、GGO_GRAY2_BITMAP、GGO_GRAY4_BITMAP、GGO_GRAY8_BITMAP または GGO_NATIVE が指定されていて関数が成功した場合、
0 を超える値が返ります。失敗した場合は、GDI_ERROR が返ります。これらのフラグのうちの 1 つが指定されていてバッファサイズまたはアドレスが 0 の場合、必要なバッファのサイズがバイト単位で返ります。
GGO_METRICS フラグが指定されていて関数が失敗した場合、GDI_ERROR が返ります。

--
ということだそうだ。

52:デフォルトの名無しさん
09/11/04 13:36:38
成功じゃなかったら失敗だろ

53:デフォルトの名無しさん
09/11/04 13:37:15
>51
どうも
#define GDI_ERROR (0xFFFFFFFFL)
ということなので、どうやらGDI_ERRORが返ってきてるようですね
引数変えたりしてもうちょっと試してみます

54:デフォルトの名無しさん
09/11/04 13:48:55
いやいやいや・・・
エラーが返ってきてるのがわかったら次はGetLastErrorだろ

55:デフォルトの名無しさん
09/11/04 15:14:21
str[i]
ここがループ内で変わってるから、違う結果になってるだけだと思う

56:デフォルトの名無しさん
09/11/04 15:24:28
実はループ制御変数はiではなかったって落ちだったりして。

57:デフォルトの名無しさん
09/11/06 03:21:30
1>c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(32) : error C2143: 構文エラー : ';' が '文字列' の前にありません。
1>c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(32) : error C2059: 構文エラー : '文字列'
1>c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(32) : error C2143: 構文エラー : ';' が '{' の前にありません。
1>c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(32) : error C2447: '{' : 対応する関数ヘッダーがありません (旧形式の仮引数リスト?)

#ifdef __cplusplus
extern "C" {
#endif

インクルードファイルの" extern "C"{ "という部分で何故か怒られます
何かインクルードファイルが足りてないとかでしょうか?

58:デフォルトの名無しさん
09/11/06 03:28:00
全部貼れ

59:デフォルトの名無しさん
09/11/06 03:39:42
お前の書いたコードの stdio.h をインクルードする前の部分がおかしい

60:デフォルトの名無しさん
09/11/06 03:55:27
なんとなくわかりました どうも

61:デフォルトの名無しさん
09/11/07 10:12:35
StdAfxにプロジェクトで使う標準ライブラリまるごとインクルードして
プロジェクト共通の名前空間内でusing namespace std;
みたいな使い方してるんだけどStdAfxってこういう使い方でいいんでしょうか?


62:デフォルトの名無しさん
09/11/07 12:06:18
ファイルサイズの調べ方を教えてくだしあ

63:デフォルトの名無しさん
09/11/07 13:52:01
>>62
FindFirstFile() API を呼んで、返ってきた WIN32_FIND_DATA の
nFileSizeHigh および nFileSizeLow メンバを調べる


64:デフォルトの名無しさん
09/11/07 14:49:11
#include <iostream>
#include <boost/filesystem.hpp>
int main()
{
namespace fs = boost::filesystem;
fs::path p;
std::cin >> p;
if(fs::exists(p)){
if(fs::is_directory(p)){
std::cout << "Directory." << std::endl;
}else{
std::cout << "size: " << fs::file_size(p) << " bytes." << std::endl;
}
}else{
std::cout << "Not found." << std::endl;
}
}

65:デフォルトの名無しさん
09/11/07 17:46:57
>>64
if と else の間の文にはより短いほうを記述しなさいって習わなかった?

66:デフォルトの名無しさん
09/11/07 18:01:28
例外・除外する処理を先に書け、と言われた。
短い方とか聞いたことない。

67:62
09/11/07 20:14:30
>63
ありがとうございます
その構造体、調べてみると上位32ビットと下位32ビットを記録するってあるんですが、
32ビット超えててもWIN32APIで扱えるんでしょうか?

68:62
09/11/07 20:15:46
>64 こちらの方もありがとうございました

69:デフォルトの名無しさん
09/11/07 20:38:06
上位32ビットと下位32ビットなら
当然32ビット超えなら余裕で大丈夫だろ

70:デフォルトの名無しさん
09/11/07 21:26:57
DirectXとWin32APIを使用して開発しているのですが
DirectXも含めた形でコンパイルするにはどうすれば良いでしょうか?

71:デフォルトの名無しさん
09/11/07 23:32:24
>>65
そこしか突っ込むところが見つけられなかったんですねw

72:デフォルトの名無しさん
09/11/08 09:55:40
>>70
普通にやればいい、どこで困ってんの?

73:デフォルトの名無しさん
09/11/09 01:25:09
>>64でスペースを含むファイルを指定できるようにする場合はまた複雑なんですかね

74:デフォルトの名無しさん
09/11/09 09:54:45
>std::cin
これをスペースまで含んでも入力できるやつに差し替えればいいだけだろう。

75:デフォルトの名無しさん
09/11/09 10:05:31
newで確保した領域って、deleteしない限り確保されっぱなしなんでしょうか?

76:デフォルトの名無しさん
09/11/09 10:13:28
スマートポインタを使って見えないところでdeleteしてるとかでない限りそうだな

77:デフォルトの名無しさん
09/11/09 18:19:31
>76
ってことは、ある関数内でchar * str = new char[10]とかで宣言したら、
returnする前にdeleteしないと、ポインタが失われて開放できなくなるんでしょうか?

78:デフォルトの名無しさん
09/11/09 18:45:43
そうだよ、それがメモリリーク

79:デフォルトの名無しさん
09/11/09 19:16:28
わかりました、どうもありがとうございます

80:デフォルトの名無しさん
09/11/09 22:32:59
文字列からダブルクォーテーション+カンマをstrstrで検出したいのですが、
ダブルクォーテーションを含んだ文字列を扱うにはどうすればいいんでしょうか
現在は下のように一文字ずつシングルクォーテーションで代入しているんですが
 char search[3];
 search[0] = '"';
 search[1] = ',';
 search[2] = 0;
 char * strtmp = strstr( str, search);
もっと簡単な方法はあるでしょうか?

それからもうひとつ別の質問ですが、文字列でswitchしたいのですが、switchは整数でしか使えないため、
現在else ifを何度も繰り返してやってる状態です
もっとすっきりした書き方はないでしょうか?
if(element == "TEST1"){   //elementはchar*型です
} else if(element == "TEST2"){
} else if(element == "TEST3"){
} else if...
こんな感じで何度も繰り返してます

81:デフォルトの名無しさん
09/11/09 22:51:58
>>80
エスケープシーケンスを使う
"\","

>if(element == "TEST1"){   //elementはchar*型です

elementはCString型かstring型の間違いよな?
せいぜい条件をvectorに入れてfindするくらいか。

82:デフォルトの名無しさん
09/11/09 23:05:06
>81
どうも \を入れれば特殊文字も使えるんですね 勉強になりました

83:デフォルトの名無しさん
09/11/10 00:30:37
>if(element == "TEST1"){   
>} else if(element == "TEST2"){
>} else if(element == "TEST3"){

この例のように比較すべき文字列の最後の文字だけが異なるのなら、方法はある。
switch()は確かに文字列は扱えない。が、文字なら扱えるのだから。

84:デフォルトの名無しさん
09/11/10 04:25:18
クラスのメンバ宣言で
 WCHAR * FILENAME;
どこかで
 FILENAME = new WCHAR[20];
 FILENAME = L"xxx.jpg";
どこかで
 delete [] FILENAME;

これでコンパイルして実行すると、deleteしようとしたときに
AssertionFailure:BLOCK_TYPE_IS_VALIDが出ます
何故かdeleteできないようなのですが、どうすればいいでしょうか?

85:84
09/11/10 04:54:36
ポインタだから代入したら別のとこに移動しちゃうからdeleteできないんですかね
WCHAR FILENAME[20];で宣言して、memcpyで代入したら特に問題なさそうだったのでそちらにします

86:デフォルトの名無しさん
09/11/10 05:02:42
アドレス 値
0x0100  "XXXXXXXXXXXXXXXXXXXX"
0xf200  "xxx.jpg"

FILENAME = new WCHAR[20]; // FILENAME = 0x0100; FILENAME は確保したメモリアドレスを指す。
FILENAME = L"xxx.jpg";    // FILENAME = 0xf200; FILENAME はL"xxx.jpg"が置いてあるメモリアドレスを指す。

delete [] FILENAME; // 0x0100を解放しなければならないのに、0xf200のアドレスを解放しようとしたのでエラー

つまり、FILENAME = L"xxx.jpg"; がダメ。たとえば以下のようにする。

FILENAME = new WCHAR[20]; // FILENAME = 0x0100; FILENAMEは確保したメモリのアドレスを指す。
wcscpy(FILENAME, L"xxx.jpg"); // 0xf200のアドレスから、0x0100のアドレスに文字列をコピーしてくる。
delete [] FILENAME; // 0x0100に確保したメモリアドレスを解放する。

87:デフォルトの名無しさん
09/11/10 05:03:27
orz

88:デフォルトの名無しさん
09/11/10 09:46:33
>86
ありがとうございました

続けて質問ですが、例えば
char str[6] = "123456";
という文字列から、int型の整数123456を導きたい場合はどうすれば良いのでしょうか
double k = 0;
for(i = 0; i < strlen(str); i++)
 k += (char[i] - 48) * pow( 10 , strlen(str) - i - 1);
これで多分求められる気がしますが、関数として用意されてるかな?と

89:デフォルトの名無しさん
09/11/10 09:58:36
int n = atoi(str);

90:デフォルトの名無しさん
09/11/10 10:16:32
ありがとうございました

91:デフォルトの名無しさん
09/11/10 10:26:55
>>88のはかなり無理やりだなw
数ヵ月後にもういちど書いてみて、全然違うコードになると思うから。

92:デフォルトの名無しさん
09/11/10 10:45:22
そろそろ教科書読み返して、MSDNの見方とググり方覚える時期だろw

93:デフォルトの名無しさん
09/11/10 10:58:04
>>88
"123456"という文字列を入れるのにstr[6]はサイズが足りないから、
atoiは動かない可能性がある。


94:デフォルトの名無しさん
09/11/10 11:02:35
コンパイラもちょっとは気を利かして配列を拡張してくれよな。
Javaとか普通にやってくれるぞ?
もう少し顧客満足度について考えるべき。

95:デフォルトの名無しさん
09/11/10 11:09:31
ご主人様の書いた内容に忠実に従っているんだから、いいコンパイラだと思うがなw

96:デフォルトの名無しさん
09/11/10 12:35:37
C言語初心者用のスレがあるだろ

97:デフォルトの名無しさん
09/11/10 14:52:48
>>94
サイズを指定しなければ気を利かしてくれる

98:デフォルトの名無しさん
09/11/10 15:02:11
まあ気を利かせるのが実行時なのかコンパイル時なのかの違いだな

99:デフォルトの名無しさん
09/11/14 12:56:03
>>94
気を利かせるってのがそもそもおかしい。
それを認めると、書いた通りに動かない可能性が出て来てしまうではないか。


プログラムはあなたが思ったようには動かないが、あなたが書いたようには動く


100:デフォルトの名無しさん
09/11/15 02:25:29
Win32API質問箱の方はC++専用でもないみたいなので、こっちでいいんでしょうか

CreateEventで作ったイベントオブジェクトの状態を知るにはどうすればいいんでしょうか
マルチスレッドにしてWaitForSingleObject()とすればイベントが起きるごとに作業ができるようですが、
マルチスレッドではなく、フレームごとに状態をチェックするようなことはできないのでしょうか

101:デフォルトの名無しさん
09/11/15 10:07:27
さあ?ここは初心者スレだから、初心者にも回答できる範囲ならすぐレスがつくと思うけど

102:デフォルトの名無しさん
09/11/15 14:58:41
状態ってシグナル状態のことだよね。
WaitForSingleObjectでいいじゃない。
シングルスレッドでだって使える。

103:デフォルトの名無しさん
09/11/16 01:59:25
SAFE_RELEASEマクロを利用するためだけに<d3d9.h>をインクルードするより、
自分でマクロ定義した方が良いんでしょうか?
それともコンパイルしたら同じことになりますか?

104:デフォルトの名無しさん
09/11/16 02:14:38
SAFE_RELEASEはd3d9.hに定義されてるのか。

105:デフォルトの名無しさん
09/11/16 04:11:16
すいません、勘違いでした
よく使われてるマクロだったのでどこかのヘッダに入ってるものだとばかり思ってました

106:デフォルトの名無しさん
09/11/20 00:02:28
 

107:デフォルトの名無しさん
09/11/20 20:50:14
プロジェクトってどのくらいの大きさで分けるべき?
ゲーム作ってるとして
・キャラクターの派生(100とかありそう)
・アイテムの~
・その他の特に関連のないこまごまとしたソース郡
・それらを纏めるMainプロジェクト
ぐらいでいいんだろうか


108:デフォルトの名無しさん
09/11/20 20:57:03
すいません、日記と間違えました

109:デフォルトの名無しさん
09/11/20 21:01:42
根本的に、Visual C++と関係ないです。

110:デフォルトの名無しさん
09/11/21 00:15:40
VC++2005や2008であった、VC++ディレクトリというオプションはどこから選べますか。
以前は、ツール→オプションで開くダイアログボックスの、プロジェクトおよびソリューションというところにありました。

111:デフォルトの名無しさん
09/11/21 00:16:31
すいません。現在使ってるバージョンはVC++2010beta2です。

112:デフォルトの名無しさん
09/11/21 00:17:16
VS2010の話?


113:デフォルトの名無しさん
09/11/21 02:14:02
教えて下さい。
Win32APIオンリー(SDK)の環境でやってます。
キーボードのEnterキーを押されたら○○する・・というようにしたいのですが
Enterキー以外のキー(1とか2とかSHIFTとか)は正常に取得できます。
Enterキーだけが取得できません。

unsigned char keys[256];

WM_KEYDOWN:

GetKeyboardState(keys)

if (keys[VK_RETURN]&0x80){
MessageBox(hWnd,"Enterが押された","",MB_OK);
}
if (keys[VK_SHIFT]&0x80){
MessageBox(hWnd,"SHIFTが押された","",MB_OK);
}

シフトを押すとメッセージが出ますが、エンターキーは(テンキーの物も)押しても
何も出ません。

あと、 WM_KEYDOWN: で
if(wParam==VK_RETURN)のようにしても、やっぱりエンターキーだけが取得できません。(他のキーは問題ない)

またウィンドウ上にフォーカスを持つような物も配置していません。

どうしてでしょうか?

114:デフォルトの名無しさん
09/11/21 10:35:55
あるプロジェクトがスタートアッププロジェクトかどうか判別するためのマクロ(あるいは方法)って存在しますか?

115:デフォルトの名無しさん
09/11/21 10:48:50
>>113
GetKeyState関数使ってもだめ?
URLリンク(msdn.microsoft.com)

116:デフォルトの名無しさん
09/11/21 12:09:16
判別されているものには必ず判別方法は存在する

117:113
09/11/21 16:05:45
>>115
GetKeyStateでも、やっぱりエンターキーのみが取得できません。

一応2台PCがあって、
WinMe(デスクトップ)とWinXP(ノート)のどちらでも同じ症状です。

118:デフォルトの名無しさん
09/11/21 17:39:09
デバッガで調べれば解決するだろうけど、MessageBoxが閉じてるだけの気がする

119:デフォルトの名無しさん
09/11/21 17:42:12
CDトレイを出したときオリジナルの音を出すことと
サブディスプレイに任意の動画を流すということは
VC++でできるのでしょうか?
できないならなんの言語でできるのでしょうか?



120:デフォルトの名無しさん
09/11/21 18:36:30
できる

121:デフォルトの名無しさん
09/11/21 18:41:17
$eject && beep



122:119
09/11/21 19:24:44
俺、やります!

123:デフォルトの名無しさん
09/11/21 22:30:05
CreateWindowでタイトルバーやフレームの太さを考慮して
ウィンドウサイズを指定するにはどうすれば良いでしょうか?

124:デフォルトの名無しさん
09/11/21 22:39:43
>>123
AdjustWindowRect

125:デフォルトの名無しさん
09/11/22 00:41:37
>>124
有難う誤字増す

126:デフォルトの名無しさん
09/11/22 05:05:50
ある値を01100010・・・と変換してファイルに出力ってどうすれば出来ますか?
そのファイルを先頭から数ビット読んで対応したものに変換、というのを
繰り返したいんですが。それと、2進数は16進数で処理して表さなければいけないのでしょうか?

127:デフォルトの名無しさん
09/11/22 05:40:33
>>126
「2進数を16進数で処理する」という言い方では君が何を疑問に
思っているのか伝わらないよ。何か根本的なところを勘違いしている
気はするんだけど何を勘違いしているのか読み取れないよ。

ちなみにCやC++の整数型の内部表現は2進数しか無い。
ソースコードに整数型の定数値を書く際の表記法は
2進数、10進数、16進数の3通りが用意されているけどね。
でも3通りの表記法のどれを使ってもコンピュータに
とっては同じ意味になる。
たとえば次の3つの書き方は全く同じ意味になる。

1) int i = 10; // 10進数で表記した値(2進数の1010)を変数に代入
2) int i = 0x0a; // 16進数で表記した値(2進数の1010)を変数に代入
3) int i = 012; // 8進数で表記した値(2進数の1010)を変数に代入

 この事を理解した上で、何を疑問に思っているのかもう1度投稿してみて。


128:デフォルトの名無しさん
09/11/22 05:43:12
>ちなみにCやC++の整数型の内部表現は2進数しか無い。
>ソースコードに整数型の定数値を書く際の表記法は
>2進数、10進数、16進数の3通りが用意されているけどね。

わろす

129:デフォルトの名無しさん
09/11/22 05:44:13
>>127
誤:ソースコードに整数型の定数値を書く際の表記法は2進数、10進数、16進数の3通りが用意されているけどね。
正:ソースコードに整数型の定数値を書く際の表記法は8進数、10進数、16進数の3通りが用意されているけどね。


130:デフォルトの名無しさん
09/11/22 05:44:53
質問の意味がよくわからないけど、2進数は「0b」、16進数は「0x」を頭に書けばそのまま使える

ビット演算について知りたいなら「ビット演算 C++」でググるのが早い

それとも"01100010"という文字列が欲しいって意味?

131:デフォルトの名無しさん
09/11/22 06:31:55
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void dmp(unsigned char *b, int len){
int i, j;
for(i = len; --i >= 0; )
for(j = 256; (j >>= 1) > 0; )
printf("%d", (b[i] & j) ? 1 : 0);
}
int main(int ac, char **av){
char buf[4096];
int i, f;
printf("input: (123, 0.5, 3.4e-6, etc...) > ");
fgets(buf, sizeof(buf), stdin);
printf(buf);
f = 0;
for(i = 0; i < strlen(buf); i++){
char c = buf[i];
if((c == '.') || (c == 'E') || (c == 'e')){ f = 1; break; }
}
if(f){
double d;
sscanf(buf, "%lf", &d);
printf("%.16f\n", d);
dmp((unsigned char *)&d, sizeof(d) / sizeof(char));
}else{
sscanf(buf, "%d", &i);
printf("%d\n", i);
dmp((unsigned char *)&i, sizeof(i) / sizeof(char));
}
return 0;
}

132:デフォルトの名無しさん
09/11/22 10:04:50
CやC++初心者向けのスレがあるよ

133:デフォルトの名無しさん
09/11/22 12:57:52
質問です。
エディットボックスを2個用意して、1/2縦と1/2横を切り替えたいのですが、どのようにすればいいでしょうか。
URLリンク(www1.axfc.net)
URLリンク(www1.axfc.net)

134:デフォルトの名無しさん
09/11/22 13:00:22
>>133
SetWindowPos

135:デフォルトの名無しさん
09/11/22 21:13:04
ここって、ウィンドウ表示さえ覚束ない俺は来るべきじゃない?

136:デフォルトの名無しさん
09/11/22 21:59:07
別にGUIアプリじゃなくてもいいけど、C++プログラム自体がかけないというなら
C++初心者スレとかの方があってると思う。

137:デフォルトの名無しさん
09/11/22 22:01:13
::ShowWindow( >>135, SW_SHOWMINNOACTIVE);

138:デフォルトの名無しさん
09/11/23 03:41:24
>>127-131
レスありがとうございます。しようとしている事は画像の符号化です。
輝度値をハフマン符号で表現し、ファイルに格納したいのです。
現段階では出力ファイルはそのままでは見れなくて、復号化処理を行う
と見れる、という状態にしたいのです。
簡単に言うと、値3→(10) 値10→(1001) ・・・を順に (101001・・・)とファイルに出力
出来ないかと思った次第です。
使用しているC++入門の本には8進と16進の扱い方しか載ってなかったので、
>>130さんの方法で少し頑張りたいと思います。

139:デフォルトの名無しさん
09/11/25 15:32:25
VC++6.0使ってるんだけど、
ダイアログアプリケーションでデストラクタの追加ってどうやればいいんですか?

仮想関数の追加やらみたけど、載ってないですし、自分でメンバ関数の追加でやっていいのかもわかりません。

ネットでいろいろ調べても追加の方法が書いてなく・・・

すみませんが、おしえてください m(_ _)m

140:デフォルトの名無しさん
09/11/25 15:37:08
>>135
ウィンドウ表示って難しそうだけど…

普通のCとWindowsCの違いって、CUIかGUIの違いとそっくりそのままなんだよね。


>>135
C言語の文法の法則によれば、CUIのプログラムができるし
WindowsのCの法則にちゃんとしたがって組めば、GUIの画面ができるし。

昔の真っ黒な画面に入力していったアプリが、GUIになってExcelに変わったとかいう話だけで
初心者が思うほど、GUIプログラミングも難しくないんだよね。Excelに変わったのと同じくらいというだけ。

141:デフォルトの名無しさん
09/11/25 15:41:41
win32だとshort intよりintのほうが早いって本当にゃん?
floatよりdoubleのほうが早いって本当にゃん?

142:デフォルトの名無しさん
09/11/25 16:53:16
>>139
メンバ関数の追加でやってもいいし、手動でやってもいい。
所詮はC++、IDEの機能を使わなきゃできない、なんて類のものではない。

143:デフォルトの名無しさん
09/11/25 17:46:13
>>141
たぶんいいたいのは、結局内部ではshort int はintに、floatはdoubleに変換するから
変換の手間だけ遅くなるって意味だと思うよ。まあ状況によってはそういうところもある

144:デフォルトの名無しさん
09/11/25 18:09:30
>>140
なんでExcel?w

145:デフォルトの名無しさん
09/11/25 20:26:48
Visual C++ 2008 で、
ウォッチウィンドウが、昼間に使っていたときは表示されていたのですが、
夜になって表示されなくなりました。(Express , Professional 両方とも)

ヘルプメニューには
> [デバッグ] メニューの [ウィンドウ]、[ウォッチ] を順にポイントし、
と書いてありますが、[デバッグ] メニューの [ウィンドウ]に[ウォッチ]が見当たりません。
( [ブレークポイント]、[出力]、[イミディエイト]の3つのみ )

ウォッチウィンドウを表示させる方法をご存知の方、教えてください。

146:デフォルトの名無しさん
09/11/25 20:34:03
デバッグ時にしかそのウィンドウは無いはず。

147:デフォルトの名無しさん
09/11/25 20:47:08
>>146
ありがとうございます。パソコン再起動して、デバッグにしたら表示されました。
パソコン再起動中に、いつもは開かないVisual Studioのダイアログボックスが開いて、
デバッガが(応答なし)と出ました。
私がうっかりしていただけかも知れません。

自分のウォッチウィンドウへの依存度の高さに気付かされました。

148:デフォルトの名無しさん
09/11/25 23:01:50
マイクロソフト、Visual C++ 2008 Expres Edition を使用しています。
2次元配列の関数へのアドレス渡しで困っています。
GCC ユーザーなもので、いまいちVisual系が解かりませんのでご教授願います。
以下は、行列 Matrix[50][10] をつくり、各要素に1を代入するソースなはずです。
/****************************************************/
#include <stdio.h>

void ALL_ONE(int *Px, int NofRow,int NofCol){
int i;
for (i = 0 ; i < NofRow*NofCol ; i++){
*(Px+i) = 1;
}
}

void main(void){
int Matrix[50][10];
ALL_ONE(&Matrix,50,10);
/*以下に対して各処理を続行*/
}
/****************************************************/
GCCでは incompatible pointer type の warning は出るものの、
コンパイルでき、結果が表示されます。

マイクロソフト、Visual C++ 2008 Expres Edition では、
コンパイルエラー
error C2664: 'ALL_ONE' : 1 番目の引数を 'int [50][10]' から 'int *' に変換できません。(新しい機能 ; ヘルプを参照) 指示された型は関連がありません。
変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。となってしまいます。どなたかたすけてください、お願いします。

149:デフォルトの名無しさん
09/11/25 23:10:58
>GCCでは incompatible pointer type の warning は出るものの、

この時点でダメじゃないか。^^
いまいちVisual系が解かってないんじゃなくて、
C言語の基礎がわかってない。
&Matrix は int[50][10] 型へのポインタを返すので、

void ALL_ONE(int (*Px)[50][10], int NofRow,int NofCol){

と書く必要がある。



150:デフォルトの名無しさん
09/11/25 23:24:48
>>148

>ALL_ONE(&Matrix,50,10);

配列名は、配列先頭要素へのポインタだから、
「&」は、いらないんじゃないですか。

ALL_ONE(Matrix,50,10);

151:デフォルトの名無しさん
09/11/26 00:10:25
>>148
ALL_ONE(&Matrix[0][0], 50, 10);としておけ、VC++でもコンパイル通るしGCCでも警告が出なくなる。
これがエラーになるか警告しかでないかの差異はC++かCかの違い。
VC++でもCとしてコンパイルすれば警告になるし、GCCでもg++ならエラーになる。

152:デフォルトの名無しさん
09/11/26 00:19:37
Visual C++ 2008 Expres Edition を使っています。
1~9の数字を並べて表示させようと思っていて、

int C[9]={1,2,3,4,5,6,7,8,9};
を最初に作ってます。
そして一度でも使った数字には0を当てはめます。
k=0;
do{
printf("数を選んで下さい\n");
while(k<9){
if(C[k]!=0){
printf("%d\n",C[k]);
k++;
}

最初に1~9を表示させるにはどうすればよいですか?


153:デフォルトの名無しさん
09/11/26 00:20:52
C言語なら俺に聞け(入門編)にいきなさい


154:デフォルトの名無しさん
09/11/26 00:25:26
スレチなのですね。すみませんでした。

155:デフォルトの名無しさん
09/11/26 06:21:44
今のVC++ってVB6の感覚でできるんでしょうか?
VC6のとき、さっぱり意味がわからずに挫折した者なんですが
今のVCならいけるでしょうか?

156:デフォルトの名無しさん
09/11/26 11:23:56
あんまかわらん
C#にしとけ

157:デフォルトの名無しさん
09/11/26 15:14:07
VC++使いっています。
CStringに入っている文字列を
UTF-8形式のテキストファイルに書き出したいのですが、
よく分かりません。
CStringWに変換して
wfopen_s
で書き出せばいいかと思うのですが、書き出すサイズが
GetLength()で取得すると、文字数しかわからず、実際のサイズが分かりません。
やってること自体見当違いでしょうか・・・。
ご教授いただけますと幸いです。

158:デフォルトの名無しさん
09/11/26 15:55:33
>>157
まずはUTF-8とUTF-16とUnicodeの違いを調べたほうがいい。

MultiByteToWideCharとWideCharToMultiByteを使って以下のように変換をする。
char(sjis?) -> wchar_t(utf-16) -> char(utf-8)
wfopen_sとfopen_sの違いはファイル名をUnicodeで指定するかどうかだけ。書き込みには関係ない。
書き込むサイズはWideCharToMultiByteの戻り値を見れば分かる。

159:デフォルトの名無しさん
09/11/26 20:29:10
>>157
>>156も言っているが、ファイルを開くのにはwfopen_sでもfopen_sでも同じ。
ファイル名もCStringで与えるなら、_tfopen_sがおすすめ。

ただし、2番目の引数を"w,ccs=UTF-8"と指定すること。UTF-8への変換はCRTがやってくれる。
これだけで、あとはいつもどおり、fprintf_s/fwprintf_s/_ftprintf_sやfputs/fputws/_fputts、
putchar/putwchar/_puttcharなどFILE*に書き込む関数が使える。

160:デフォルトの名無しさん
09/11/26 22:12:06
148です。149さま,150さま,151さま
皆様ありがとうございました。

>>151さま
ALL_ONE(&Matrix[0][0], 50, 10);
でいけました!!!
ありがとうございます。
今後は、「配列の位置」をまじめに記述するよう心がけます。
考えてみれば、当然のことですね。。
&Matrix[0][0]でなくても&Matrix[5][0]でも良い訳ですからね。

>>149さま
ありがとうございます。
「まじめに動けばいい!」と思ってwarning は全て無視してました。
精進いたします。ちなみに
void ALL_ONE(int (*Px)[50][10], int NofRow,int NofCol){
はアウトでした。

>>150さま
gcc は ALL_ONE(Matrix,50,10); でいけまました。
visual C++ .net の教科書は & をつけろとありました。
ちなみに、visual C++で、配列が1次元のときは & なしで大丈夫でした。
私の想像ですが、ALL_ONE(Matrix,50,10);の記述は、コンパイル時、内部マクロで、ALL_ONE(&Matrix[0],50,10);に書き換えられてコンパイルされるのかと。。。ふと思いました。

おかげで、助かりました。再度、皆様方に厚く御礼申し上げます。

161:デフォルトの名無しさん
09/11/26 23:25:08
>私の想像ですが、ALL_ONE(Matrix,50,10);の記述は、コンパイル時、内部マクロで、ALL_ONE(&Matrix[0],50,10);に書き換えられてコンパイルされるのかと。。。ふと思いました。

死ね

162:デフォルトの名無しさん
09/11/27 00:06:08
マクロっていうのはおかしいけど、&HOGE[0]とHOGEが同一という認識は正しいよ。

163:デフォルトの名無しさん
09/11/27 23:08:47
自慢じゃないが、"&"と"*"は、ウォッチウィンドウで確認しながら、つけたり外したりするのが確実。
自慢じゃないけどね。

164:139
09/11/28 14:23:20
>>142
どうもありがとうございます。遅れてしまい、すみません。。
質問したこと忘れてました。。

メンバ関数の追加でやればいいんですね。自分は以前Java業でして、倉庫の奥の
VC6.0を引っ張り出して、遊んでいます。いまいちIDEの機能がつかめなく
どうすればいいかわかりませんでした。

助かりました。これから、やってみます。ありがとうございました。
ググッても必要な情報がでてこなかったので・・・

165:デフォルトの名無しさん
09/11/30 02:58:06
static double func[][4] = {
{ 1.0, 0.0, 0.0. 0.0 },
{ 0.0, 1.0, 0.0, 0.0 },
{ 0.0, 0.0, 1.0, 0.0 },
{ 0.0, 0.0, 0.0, 1.0 },
};

とあるソースに書いており、それは動いたのですが、他のプロジェクトのソースにこのまま写すと
error C2143: 構文エラー : ';' が '}' の前にありません。
error C2059: 構文エラー : '}'
error C2143: 構文エラー : ';' が '{' の前にありません。
error C2447: '{' : 対応する関数ヘッダーがありません (旧形式の仮引数リスト?)
error C2059: 構文エラー : ','

とエラーがでて動きません。
なぜでしょうか

166:デフォルトの名無しさん
09/11/30 10:35:14
>{ 1.0, 0.0, 0.0. 0.0 },

コンマがピリオドになっている。

167:デフォルトの名無しさん
09/11/30 20:12:03
追加ライブラリと同じように、追加インクルードファイルディレクトリを
ソース内でpragmaなどを使って指定する方法はありますか?

168:デフォルトの名無しさん
09/12/01 10:26:01
#pragma comment(linker, "/libpath:~")
でできないかな?

169:デフォルトの名無しさん
09/12/01 10:27:28
ってインクルードかいな

170:デフォルトの名無しさん
09/12/01 17:40:11
直接指定したらいいじゃんw

171:デフォルトの名無しさん
09/12/01 18:20:35
>>168-170
stdafx.hあたりに、>>168のようなライブラリフォルダと同じような書き方で
インクルードフォルダを指定できたらと思っているのですが、
やっぱり無いんでしょうかね。

172:デフォルトの名無しさん
09/12/01 18:29:16
pragmaでinclude関連はinclude_aliasしかわからん。
これと>>170組み合わせたら?

173:デフォルトの名無しさん
09/12/01 18:29:56
つーかインクルードパスをソースから指定する理由がわからん。

174:デフォルトの名無しさん
09/12/01 18:36:34
自分が使わないものまで全部知ってる必要ないからな
正確な情報が必要ならサポートに相談すべき

175:デフォルトの名無しさん
09/12/03 13:53:27
出力ウィンドウに、ファイルパス+(行数)みたいな形で出力すると、
VC++標準のコンパイルエラーなどの出力と同じように、ダブルクリックとかF8キーでジャンプできるようになりますが
決まった形式とかあるんでしょうか。今はVC++の出力を真似て書いてます。

176:デフォルトの名無しさん
09/12/03 14:35:23
はなくそってうめぇな、おい

177:デフォルトの名無しさん
09/12/03 14:37:54
失礼します。
VisualC++ 2008 Express Editionを使用しているのですが、
グローバルな文字列の配列を宣言するには、どのようにすれば良いのでしょうか?

private: System::String^ PrivateString[1000];
これではエラーになってしまうので、何か良い方法がありましたらご教授よろしくお願いします。

178:デフォルトの名無しさん
09/12/03 15:14:38
どんなエラー?ほんとにC++/CLIなの?
もしそうなら↓で聞いた方がいいかも。

C++/CLI part3
スレリンク(tech板)

179:デフォルトの名無しさん
09/12/03 16:29:01
>>178
エラーはこれです。

1>d:\cpp\Form1.h(986) : error C2728: 'System::String ^' : ネイティブ配列はこのマネージ型を含むことはできません
1> 'array<System::String ^>' を意図しましたか?

arrayを使えば良いのかな?でも
private: array<System::String ^> PrivateString = gcnew array<System::String ^>(1024);
ではダメでした

1>d:\cpp\Form1.h(987) : error C3149: 'cli::array<Type>' : トップレベルの '^' なしに、この型をここに使用することはできません
1> with
1> [
1> Type=System::String ^
1> ]
1>d:\cpp\Form1.h(987) : error C3845: 'HC3::Form1::PrivateString': ref クラス または値型の内部で、スタティック データ メンバのみ初期化することができます



180:デフォルトの名無しさん
09/12/03 16:36:39
array<System::String ^>^
じゃないのか

181:デフォルトの名無しさん
09/12/03 16:54:03
>>180
ありがとうございます。
加えてstaticにすることで、動作しました。

private: static array<System::String ^>^ PrivateString = gcnew array<System::String ^>(1024);


182:デフォルトの名無しさん
09/12/04 04:37:58
度々失礼します。

VisualC++ 2008 Express Editionで、iniファイルの操作を行おうと思っているのですが、カレントディレクトリの取得から躓いてしまいました。
URLリンク(msdn.microsoft.com)
を、参考に記述してみたのですが、最初の
String^ path = Directory::GetCurrentDirectory();
の、ところでエラーが発生してしまいました。

1>d:\cpp\Form1.h(1049) : error C2039: 'GetCurrentDirectoryW' : 'System::IO::Directory' のメンバではありません。
1> c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : 'System::IO::Directory' の宣言を確認してください。
1>d:\cpp\Form1.h(1049) : error C2660: 'GetCurrentDirectoryW' : 関数に 0 個の引数を指定できません。

namespaceは宣言していますし、GetCurrent~は::の後の予測変換で表示されているのを選んでいるので、メンバになっていると思うのですが・・・。
すいませんが、よろしくお願いします。

183:デフォルトの名無しさん
09/12/04 05:11:21
>>182
たぶんこれ。
URLリンク(social.msdn.microsoft.com)

ていうか GetCurrentDirectoryW でぐぐったら最初にでてきたぞ。

184:デフォルトの名無しさん
09/12/05 01:38:33
>>183
ありがとうございます。
'GetCurrentDirectoryのところで'GetCurrentDirectoryW'の説明があったから、そっちは検索してませんでした。
CLIもいろいろとめんどくさいのですね。

185:デフォルトの名無しさん
09/12/05 11:21:14
他スレからの誘導です。
可変長の符号をファイルに出力したいのですが
どのようなプログラムにすればいいでしょうか?

例.値(10進)「3 3 6 3 6 2」

3・・・00
6・・・01
2・・・100

出力後のファイル(2進)「0000010001100」

最低1バイト単位でファイルに出力したいのですが。

186:デフォルトの名無しさん
09/12/05 11:45:25
1バイトのバッファにビット演算で格納して言って、溢れたらファイルに出力でいいんじゃないの?

187:デフォルトの名無しさん
09/12/05 13:52:44
単なる文字列の置き換えじゃん。


188:デフォルトの名無しさん
09/12/05 19:27:45
プロジェクトをテンプレートとして登録したいのですが、それらしきメニューが見当たりません。
調べているとVC++2005では出来ないそうですが、VC++2008は出来ますか?
エディションはExpressです。

189:デフォルトの名無しさん
09/12/05 19:46:59
>>184
最近のWindows SDKだとその問題への対処がなされていて、>>182のように書いてもエラーが出なくなっている。
いつからだかは分からないけど、すくなくとも最新のWindows SDK 7.0はそうなっている。

190:デフォルトの名無しさん
09/12/06 10:44:56
>>188
これじゃないの?
URLリンク(www.atmarkit.co.jp)
2005EEはもう消してしまったけど、VS2005ProとVC#2008EEにはテンプレートのエクスポートの項目あるけどなあ


191:デフォルトの名無しさん
09/12/06 13:18:43
>>190
ありがとうございます。
それがVisual C++ にはエクスポートの項目が見つからないのです。

192:デフォルトの名無しさん
09/12/08 12:02:08
最近、VisualC++ 2008 Express Editionを使い始めたのですが、
テキストエディタのことで質問させて下さい。

カーソルのある行をコピー、カーソルのある行を選択、
もしくはカーソルのある行を削除というショートカットコマンドはあるんでしょうか?
MSDNで探して見たのですが、見当たりません。
もし、そのようなショートカットを使いたい場合はどうしたらいいのでしょうか?

193:デフォルトの名無しさん
09/12/08 12:49:20
カーソルのある行の最左端をマウスクリックすりゃその行全体を選択できるけど、それじゃダメなのか?
あとは Ctrl+X, とか Delete すりゃいいんだが。

194:デフォルトの名無しさん
09/12/08 14:32:20
RGB値に簡単に倍率を掛ける方法はないですか?
RGB(r*x,g*x,b*x)みたいな事をしたいんですが
これだと3色の値を覚えないといけないので
作られた後の色に対して倍率を掛けたいのです

195:デフォルトの名無しさん
09/12/08 15:27:06
RGB値って何?

196:デフォルトの名無しさん
09/12/08 17:22:22
RGB( r, g, b ) * x

これで何が不満だというのだ。

197:デフォルトの名無しさん
09/12/08 17:24:05
それは倍率になってないだろ。w

198:デフォルトの名無しさん
09/12/08 17:29:07
>>194
GetRValue GetGValue GetBValueでRGB値から各値は取れますよ。

199:デフォルトの名無しさん
09/12/08 19:09:23
>>192
1文字も選択していない状態でCtrl+Cすると、カーソルのある行をコピーすることになる。
Ctrl+Xで切り取りも同様。

200:194
09/12/08 21:59:21
>>198
ありがとうございました

201:デフォルトの名無しさん
09/12/09 00:38:44
>>193
回答ありがとうございます。
以前はそれで済ませてましたが、キーボードから手を離してマウス操作だと、
めんどくさく感じていたので・・・。

>>199
回答ありがとうございます。
やりたかった動作です。
本当に助かりました。

202:デフォルトの名無しさん
09/12/09 10:15:24
ぬるぽ

203:デフォルトの名無しさん
09/12/09 11:34:04
ガッ
といったところで1つ質問良いでしょうか
作成手段:「空のプロジェクト」から窓作成
目的:リソースビューで追加したウィンドウのハンドルを取得したい

コード抜粋
/**********winmain.cpp***********/
HINSTANCE hInst; //instance
HWND hEdit; //edit control
wndProc(HWND hWnd,UINT uiMsg,WPARAM wParam,LPARAM lParam)
{
  HWND hDlog;//ダイアログのハンドル
  switch(uiMsg){
    case WM_CREATE://ウィンドウ作成時
      hDlog = CreateDialog(hInst, MAKEINTRESOURCE(IDD_PROPPAGE_MEDIUM),
        hWnd, DialogProc);//エディットボックスを持ったダイアログを作成
      hEdit = /*???   エディットボックスのハンドルを取得   ???*/
      /*** なんじゃもんじゃ ***/
  }
  /*** なんじゃもんじゃ ***/
}

/**********resource.h***********/
#define IDC_EDIT1            1020
#define IDD_PROPPAGE_MEDIUM   106

グローバル変数hEditにエディットボックスのハンドルを取り付けたいのですが
findwindowとかでは出来ないっぽいので、どーしたらよいものかと・・・
IDD_PROPPAGE_MEDIUMの中身はただのエディットボックスを持ったダイアログということでお願いします

204:デフォルトの名無しさん
09/12/09 11:41:33
GetDlgItemとか?

205:デフォルトの名無しさん
09/12/09 14:26:03
GetDigItem・・・
hEdit=GetDlgItem(hDlog, IDC_EDIT1);
でnullっぽい(unused)でした。
なんぞやり方間違ってるのか。ハテ

206:デフォルトの名無しさん
09/12/09 14:43:22
>>205
ほんとに0x00000000だったのか?
unusedは気にしないでいいぞ

207:デフォルトの名無しさん
09/12/09 15:04:46
SetWindowText(hEdit,MAKEINTRESOURCE(int value));

文でnullリファレンス例外が飛んでるっぽいのでnullだと考えてたのですが
じゃあどこか別のところを見ているのか・・・

208:デフォルトの名無しさん
09/12/09 15:09:56
>>207
>SetWindowText(hEdit,MAKEINTRESOURCE(int value));
そりゃないだろ、MAKEINTRESOURCEは数値を文字列に変換するわけじゃないぞ。
とりあえず、SetWindowText(hEdit, _T("Hello")); で試すとどうなる?

209:デフォルトの名無しさん
09/12/09 15:20:35
herroが出てきました・・・getdigitemは問題ないぽいです
value(int)を文字列の頭に入れておく・・・という感じでしょうか

数値文字列変換苦手だー

210:デフォルトの名無しさん
09/12/09 15:26:31
とりあえず万能のsprintf()を覚えておけばいいと思うよ。

211:デフォルトの名無しさん
09/12/09 17:18:58
sprintfの%.数字gで対応~

ありがとうございます。山越えたみたいです・・・

212:デフォルトの名無しさん
09/12/09 17:39:00
VC++ 2008eeでC++の勉強を始めたのですが
この先どのように勉強を進めて良いのか分かりません
皆さんはどのようにマスターされたのでしょうか?
やさしいC++ 第3版の内容は一通り終わっています

213:デフォルトの名無しさん
09/12/09 17:39:41
なんか作る

214:デフォルトの名無しさん
09/12/09 17:42:51
基本的な文法が理解できるようになったのなら、後は何がしたいのかによる。

215:デフォルトの名無しさん
09/12/09 19:08:12
しょうもない質問
struct struct{
int i;
}

main(){
 for(0から10回){
  func1();
 }
}
func(){
 static struct a ={0};
 a.i++;
}

もうここまで書いたなら試せって話だが。これってa.i=10でいいよね

216:デフォルトの名無しさん
09/12/09 19:14:25
C++スレでやってくれ

217:デフォルトの名無しさん
09/12/09 20:27:06
>>214
自分が作りたいものによって学ぶべきものが変わってくるという事ですね
色々調べてみます
ありがとうございます

218:デフォルトの名無しさん
09/12/09 21:40:01
日本語話せます程度の話だからな

219:デフォルトの名無しさん
09/12/09 21:59:46
日本語の単語を知ってます、程度じゃね
話せるようになるには数作るしかない

220:デフォルトの名無しさん
09/12/09 23:16:33
エラーで困っているので助けてください。

error LNK2001: 外部シンボル ""public: virtual void __thiscallCDialog::OnInitDialog(void)" (?OnInitDialog@CDialog@@UAEXXZ)" は未解決です。
error LNK2001: 外部シンボル ""public: virtual void __thiscallCDialog::OnInitDialog(void)" (?OnInitDialog@CDialog@@UAEXXZ)" は未解決です
error LNK2001: 外部シンボル ""public: virtual void __thiscallCDialog::OnInitDialog(void)" (?OnInitDialog@CDialog@@UAEXXZ)" は未解決です。
error LNK2019: 未解決の外部シンボル "public: virtual void __thiscallCDialog::OnInitDialog(void)" (?OnInitDialog@CDialog@@UAEXXZ) が
関数"public: virtual int __thiscall CprototypeApp::InitInstance(void)"(?InitInstance@CprototypeApp@@UAEHXZ) で参照されました

とエラーが出ていますが、原因がわからず困っています。

同じソースを別の人の環境で実行すると何もエラーも出ずにコンパイル・リンカーが通ります。
私も昨日までは通っていましたが、コーディングを設定ファイル?とかがおかしくなってしまったのか、
昨日のデータを使ってもリンカーエラーが出て困っています。

環境として、
自分   VisualStadio 2008 VC++(MFC)
別の人  VisualStadio 2008 VC++(MFC)

本当に困っています。何か知っている方がいらっしゃったら力を貸してください。

221:デフォルトの名無しさん
09/12/10 00:17:32
必要なライブラリをリンクしてない

222:デフォルトの名無しさん
09/12/10 12:42:23
>>220
ソリューション丸コピーでビルドが通らないの?ならVisual Studioをインストールしなおすのがいいだろう。
プロジェクトファイル(.vcproj)やソリューションファイル(.sln)もソースファイルだよ。
プログラマが操作した設定が書かれている。

223:デフォルトの名無しさん
09/12/10 13:02:26
MFCスレとマルチ

224:デフォルトの名無しさん
09/12/10 17:40:48
MFC+VC2005です。

BYTE配列で持ってるBMPファイルのデータを
(CFileでWriteするとbmpファイルになるデータです)
JPEGに保存する方法はどういうのがあるでしょうか。

無駄なディスクI/Oは避けたいので
一度保存して、それをCImageで開くと言うのは最終手段と思っているのですが。


225:デフォルトの名無しさん
09/12/10 17:47:42
IStreamで

226:デフォルトの名無しさん
09/12/10 18:16:51
IStreamが嫌なら、CreateDIBitmapしてCImageのAttachを呼ぶなど。

227:デフォルトの名無しさん
09/12/10 18:37:01
①コマンドプロンプトを開く
②バッチファイル実行
③cl sample.cppと打つ
この手順で勉強しているのですが、毎回毎回これをやるのがつらいので、
sample.cppをドラッグアンドドロップすると上記手順を実行してくれるようなソフトや方法はありませんか?


228:デフォルトの名無しさん
09/12/10 18:56:07
そういうやり方が好みならコンパイル用のバッチ作って、そこへsample.cppをドラッグアンドドロップだな
あと、コマンドラインでやりたいなら、VCじゃなくて他のコンパイラの情報を参考にした方がいいし、
コンパイラもそっち使った方がいいかもしれない。

229:デフォルトの名無しさん
09/12/10 19:18:44
なるほど、Windowsのバッチで出来るのですか。
Linuxでg++でプログラミングしたことはあるのですが、WindowsでやるならVisual C++をやりたいなぁと思っておりまして。
申し訳ありませんが、
Windowsのバッチを書いて下さりませんか?
m(_ _)m

230:デフォルトの名無しさん
09/12/10 19:42:48
こんな感じかな。vcvars32.batは2番のバッチファイルのことだから適当に置き換えること。
@echo off
call vcvars32.bat
cd /d %~dp1
cl "%~nx1"
pause

231:デフォルトの名無しさん
09/12/10 20:01:39
どうもありがとうございます。
これ、ちょっと応用すればいろいろ使えそうですね。


232:224
09/12/11 09:18:48
>>225-226
試してみます、ありがとうございます

233:デフォルトの名無しさん
09/12/11 15:03:58
VC++って何気に変数名とかクラス名とかに日本語使えるけど
別に良いよね(ry

234:デフォルトの名無しさん
09/12/11 15:22:02
一応vcもNMAKEってのがあるぞ、Linuxやってるとのことなので一応

235:デフォルトの名無しさん
09/12/11 17:56:53
msdev もコマンドラインから使えるよ。
.dsp とターゲット("~~ release" とか)を指定してビルドできる。


236:229
09/12/12 00:15:30
ありがとうございます!!!

237:デフォルトの名無しさん
09/12/12 16:40:09
Visual C++ 2008 Express EditionでCLRのWindowsフォームアプリケーションを作ろうとしています。

標準状態で、画面のDPI設定を通常サイズ(96DPI)と125%(120DPI)にした場合で実行時のフォント及びフォームサイズが変わってしまいのす。
変わらないようにする方法は無いのでしょうか?

画面のDPI設定を無視して常に同じ大きさのフォームを表示がしたいです。

CLRを使うことがそもそもの間違いならそう指摘してください。


238:デフォルトの名無しさん
09/12/12 16:43:13
>変わらないようにする方法は無いのでしょうか?

考え方が間違っている。
96DPIと120DPIの双方に対応できるようにするのが正解。

239:デフォルトの名無しさん
09/12/12 17:09:48
winの仕様だから、おまかせで作るとそうなる。
気に入らないなら自分で調整するか、最初から自分で出す。

240:デフォルトの名無しさん
09/12/12 19:29:32
サイズを変えてるのに変わってしまうという文句はどういうことだ?
変えてるんだから変わるのは当たり前だろ?

241:デフォルトの名無しさん
09/12/13 10:27:02
プログラム次第ですが、変わって構わない場合と、変わると不味い場合がある。

不特定環境での実行を想定するなら、サイズが違うことを前提で画面サイズ固定のプログラムを作るのは当たり前ですよね。

242:デフォルトの名無しさん
09/12/13 13:49:57
Visual C++ 2008 expressでdataGridViewを使用しようとしています。
環境としては.NETを用いて、CLR-Windowsフォームアプリケーションの
プロジェクトにしています。

 double 型の配列データをdataGridViewに表示させようとしています。
例えば、test[0]~test[10]にdouble型の数値データが入っていると
します。
 フォームにdataGridViewを配置します。名前はデフォルトのまま
dataGridView1とします。自動的に出てくるメニューで列の追加を選び、
ヘッダーテキストをtestにして追加を押します。そして閉じます。
次に、Form1.Load()で

dataGridView1.Rows.Add(test);

と書くと、ここで

error C2228: '.Rows' の左側はクラス、構造体、共用体でなければな
りません

とエラーが出てしまいます。どのようにすればよろしいのでしょうか。
記してあること以外は、全てデフォルト設定になっています。


243:デフォルトの名無しさん
09/12/13 14:41:40
>>242
dataGridView1->Rows->Add(test);

244:デフォルトの名無しさん
09/12/14 13:31:30
初心者です教えてください。
LinuxでC言語であるプログラムを作り、その途中に「scanf("%d",&a);」
というのをいれて、プログラムをそこで一度ストップさせ、
なにか入力があったときに開始する といったようなものを作りました。(説明下手ですみません)
VCではコマンドラインがありませんが、同じようにできますか??

245:デフォルトの名無しさん
09/12/14 13:36:33
できるよ
Win32コンソールアプリケーションで作ればいい

246:デフォルトの名無しさん
09/12/14 13:59:53
ありがとうございます

板違いかもしれませんが、VCで作ったプログラムを
matlabでmexして動かそうと思っているのですが、コンソールアプリケーションをmexしたらできますか?

247:デフォルトの名無しさん
09/12/14 14:09:14
すみません 246の者です
日本語が意味不明な気がしたため、追記させていただきます。
244で書いたようなことをmatlabでmexして動かしたいと思っています。
それは可能ですか?


248:デフォルトの名無しさん
09/12/14 14:23:57
わからんけどmatlabとかmexとかVisualStudioでググるとそれらしきことを書いたとこはあるみたいだが

249:デフォルトの名無しさん
09/12/14 17:46:35
リソースエディタというのは無料では使えないんでしょうか?
vc++2008eeを使ってるんですがどこを探しても見つからないもんで・・・

250:デフォルトの名無しさん
09/12/14 17:47:52
VisualStudio付属のリソースエディタはStandard以上、EEには無い。
ただし、リソースコンパイラ等は付属しているので、テキストでrcファイルを書くか、
外部のリソースエディタを使って組み込むことは可能。

251:デフォルトの名無しさん
09/12/14 17:49:52
ありがとうございます
外部ツール導入してみます

252:デフォルトの名無しさん
09/12/15 07:19:29
URLリンク(www.wilsonc.demon.co.uk)

253:デフォルトの名無しさん
09/12/15 23:25:00
すみません。VC++6.0で作成したソフトをVC2008でもう一度作成しようとすると
変更点とか多いですか?

友達がVC6.0で作ってくれたサンプルコードをくれたので、VC2008でやってみたいんですが。
もちろんMFCです。ちなみにVC2008は、StandardEditionをかおうかどうか迷っています。

容易にできるなら、買いたいと思っています。

254:デフォルトの名無しさん
09/12/16 00:26:33
StandardEditionは2010で廃止だお
今買わないとPro買うしかなくなるお

255:デフォルトの名無しさん
09/12/16 01:35:10
VC++2008EEでwindowsSDKを使っています。
createprocessで起動したアプリのウィンドウサイズを取得取得したくて調べていたら
EnumWindowsでプロセスIDの一致でウィンドウハンドルを取得するのが一般的みたいなので
URLリンク(akky.cjb.net)
ここのサンプルを試していたのですが、うまく動いてくれません。
プロセスID一致のifの中にブレークポイントを置くと止まるので、一致までは行ってるみたいなんですがメモ帳が終了しません。
どこがおかしいのでしょうか。


256:デフォルトの名無しさん
09/12/16 10:07:57
ブレークポイントで止まるなら、spy++とか実行してその時のウインドウハンドル比べたり
WM_CLOSEがたしかに投げられてるか調べてみては。

257:デフォルトの名無しさん
09/12/16 10:19:15
サンプルは説明を簡素化するのにメモ帳使ってるだけで
きちんとデバッグしたかったら自分で作ったプログラム使えばいい。

258:デフォルトの名無しさん
09/12/16 15:27:16
>>255

そこ、MFC使ってるじゃん。

あなたは、MFCのついてないExpressEditionだから、そのサンプルのままじゃ動かないでしょう。

259:デフォルトの名無しさん
09/12/16 15:33:48
まあちょっとやってみたけど(Afx)MessageBoxの変更でEEで動かしたよ
CreateProcessの第2引数はリテラルじゃダメで変数にしたけどな。
ちゃんとメモ帳起動して終了した。

260:デフォルトの名無しさん
09/12/16 15:58:46
>>255

これを追加 #include <windows.h> の下の行に追加
   ↓
#include <tchar.h>


以下の箇所を書き換え

AfxMessageBox(_T("メモ帳を終了させます。"));
      ↓
MessageBox(NULL, _T("メモ帳を終了させます。"), "メッセージボックス", MB_OK);

if(AfxMessageBox(_T("強制終了させますか?"), MB_YESNO) == IDYES)
      ↓
if(MessageBox( NULL, _T("強制終了させますか?"), "メッセージボックス", MB_YESNO ) == IDYES)




261:デフォルトの名無しさん
09/12/16 16:24:33
質問者はブレークポイントで止まると書いてるんだし、
実行とメモ帳起動まではうまくいってるとわかるだろう

262:デフォルトの名無しさん
09/12/16 18:28:45
ソース貼れよ

263:デフォルトの名無しさん
09/12/16 18:53:29
VC++2008EEで、CrossWalkSDK(3DCGソフト間のデータ
コンバータ用のSDK)を勉強しているのですが、SDK内の
ヘッダのクラスの定義部分でエラーが出てしまいます。
===================================================
#include "SIBCNode.h"
#include "SIBCString.h"

//エラーの出る部分
class XSIEXPORT CdotXSIParam : public CSIBCNode
{
 public:
CdotXSIParam(); // Default constructor.
 //-- 以下メンバ関数が続く ---------------
};

//--- Global Functions ----------------------
XSIEXPORT CdotXSIParam* CreatedotXSIParam();
XSIEXPORT void AllocateLocalXSIArray(SI_TinyVariant*, SI_Long);

<エラーの内容>
error C2470: 'CdotXSIParam' : 関数定義のようですが
パラメータリストがありません。外見上の本体をスキップします。
===================================================
CdotXSIParamがクラス名である事は分かるのですが、
エラーの元になっているクラス名の前やグローバル関数の
戻り値の前にある「XSIEXPORT」の部分の意味が分かりません。

こういう書き方は自分の持っているC++の本(独習C++)では
載っていないので推測なのですが、VisualC++で設定される機能
なのでしょうか? よろしくお願いいたします。

264:デフォルトの名無しさん
09/12/16 19:06:28
XSIEXPORTに右クリックで定義を表示させれば出てくることもあるけど
たぶん#defineで関数規約か__declspec(・・・)とか書いてあるんだと思うよ
XSIの文字で固有のものだってわかるだろう

265:デフォルトの名無しさん
09/12/16 19:35:31
クラス宣言の前に呼び出し規約っぽい定義はあんま知らんな、クラス宣言が関数に思われてるし
定義XSIEXPORTの中身がわからんとなんともいえんが 他のファイルの後にincludeしなきゃならんとかか


266:263
09/12/16 19:51:57
>>264さん、>>265さん、ありがとうございます。
仰るとおりファイル内を検索してみると

#ifndef XSIEXPORT
# define XSIEXPORT __declspec(dllexport)
#endif

という記述が見つかり、VC++でプリプロセッサや
追加の依存ファイル等をいろいろ設定していたら無事に
コンパイルできるようになりました。
declspec等の呼び出し規約キーワードというものがあるのも
知りませんでした…orz

267:デフォルトの名無しさん
09/12/16 23:17:01
255です。
レスありがとうございました。
今までWM_CREATE内にサンプルをコピペして実行していたのですが
ボタンを作って実行したら正常に動きました。
URLリンク(www.dotup.org)






268:デフォルトの名無しさん
09/12/16 23:20:30
そういうオチだったのか・・・・・・ ゴクリ 予想できなかった。。。。

269:デフォルトの名無しさん
09/12/17 01:27:01
だれか、漏れに最新版のVisualStudioを寄付してほしいお。

寄付してくれたら、ひまだからご希望のソフトをつくってあげるお。

270:デフォルトの名無しさん
09/12/17 01:29:06
最新版のVisualStudioが当たるプレゼントコーナーとかどこかにないかお?

MFCがいるから、StandardEdition以上だお( ^ω^)

271:デフォルトの名無しさん
09/12/17 09:53:04
評価版の有効期限を延ばす方法
ネットで知ったのですが、評価版の有効期限を延ばす方法が存在します。実際にやってみたのですが、うまくいきました。
あまりおおっぴらにできることではないので内緒です。でもちょっと調べれば判るとおもいます。
どうしても判らない人は、Express Editionで我慢しましょう。


272:デフォルトの名無しさん
09/12/17 15:39:14
Visual Studio2008 Standard EditionではExpress Editionでは出来なかった、.NET無しでのフォームアプリケーションの視覚開発できますか?


273:デフォルトの名無しさん
09/12/17 17:03:28
フォームは.net

274:デフォルトの名無しさん
09/12/17 17:17:16
フォームを使わない、リソースエディタでのダイアログやMFCのFormViewということなら可能

275:デフォルトの名無しさん
09/12/17 22:31:20
Expressでもできるけどね

276:デフォルトの名無しさん
09/12/18 07:58:44
SDKなら無料で配布してたよね

277:デフォルトの名無しさん
09/12/19 16:44:00
俺のチンポも無料で配布してんだけど・・・なかなか

278:デフォルトの名無しさん
09/12/19 17:45:13
>>277
なかなか人柱になってくれる人がいないわけね。

279:デフォルトの名無しさん
09/12/21 06:02:43
プログラム以前の質問なんですが
新規作成からプロジェクトを選んでCLR→空のCLRプロジェクト
プロジェクト名を入力し、ソリューションのディレクトリ作成にチェックを入れてOKを押すと
画面左側にソースファイルやヘッダーファイルなどのソリューションのディレクトリが表示されるはずなんですが
何をしてもディレクトリが表示されません、そのおかげでソースファイルを右クリック→追加新しい項目からcppファイルを追加したいのにそれができません…
何か解決方法はありませんでしょうか?
visual c++ 2008 express editionを使用していて、過去に同じことをやったらソースファイルが出ていたはずなんですが今は出てこないんです…

280:デフォルトの名無しさん
09/12/21 06:12:44
279です
すみません、自己解決できました
バーのプロジェクト→新しい項目の追加からcppファイルを追加し動作させることができました
スレ汚し申し訳ありませんでした

281:デフォルトの名無しさん
09/12/21 07:46:21
ドンマイ

282:デフォルトの名無しさん
09/12/23 23:00:51
VC++2005を使ってスレッドを使うプログラムを作成しています。
AfxBeginThread()を用いてスレッドにウィンドウハンドルとデータを与え、
計算を行った後メッセージを贈ってスレッドの作成元に計算結果を送信するようにしているのですが、
実行すると2~3回に1回の頻度で

「一般エラー:ウィンドウハンドルが無効です」

とエラーメッセージが表示されます。
実行するたびに出るわけではないので、どこでエラーが出ているのかが良く分からないのですが、
問題としてはどういったことが考えられるのでしょうか。

283:デフォルトの名無しさん
09/12/23 23:08:02
一番単純でありがちなのが、スレッドのパラメータとして渡すのがメインスレッドのローカル変数で、サブスレッドが値を読む前に破棄されているということ。

284:デフォルトの名無しさん
09/12/24 19:28:39
>>282
メインスレッドのほうが見に行かないと

285:282
09/12/24 21:39:05
色々レスありがとうございます。

>>283
調べてみましたが、どうも問題は変数部分ではなくて
計算を行うスレッド内で動かしていたプログレスバーの部分だったようでした。
最初の書き込みで一切触れていない部分ですみません。
>>284
メインのほうが見に行くということは、計算のスレッド部分の関数を呼び出すなりして
値を取り出すということでしょうか

まだ上手く動作できるようになっていませんので、まだ何か思いつく所があったらお願いします。

286:デフォルトの名無しさん
09/12/30 00:37:50
age

287:デフォルトの名無しさん
09/12/31 23:07:51
VC++2008を使ってCの勉強をしている者なんですが、最初はCの入門書籍・入門サイトを見ながら、
「ソリューションの中のプロジェクトにソースファイル(cppファイル)を追加して、コード
(例えばHalloWorldの練習)を書く。
書けたらデバッグなしで開始→上手くいったらHalloWorldの練習コードを全部消して次のコード
(例えばscanfの練習)を書く→上手くいったらscanfの練習コードを全部消して次のコード……(以下繰り返し)」
のような手順で勉強していました。

でも最近になって1つのソリューションの中に複数のプロジェクトを作れるのを知って、試しに

ソリューション
L__プロジェクト1
  L__HalloWorldの練習.cpp
L__プロジェクト2
  L__scanfの練習.cpp

のような構成にしてみました。
それでこれを「デバッグなしで開始」してみると、いつもHalloWorldしか実行されません。
scanfの練習.cppを真ん中のエディタ画面に出していても、HalloWorldが実行されます。
ソリューションの中の一番上のプロジェクト以外を実行したい場合はどうすればよいのでしょうか?

自分で色々試してる最中に、メニューに「プロジェクトのビルド順序」というのを見つけたので
「プロジェクトの依存関係」というところをいじって「ビルドの順序」タブで
scanfの練習.cppが一番上に来るようにしてみたのですが、上手くいきませんでした。

見当違いな質問をしていたらすみません……。


288:デフォルトの名無しさん
09/12/31 23:14:31
>>287
ソリューションエクスプローラーで、プロジェクトを右クリックして
「スタートアッププロジェクトに設定」を選ぶ。


289:287
09/12/31 23:22:38
>>288
できました! ありがとうございます!!
「スタートアッププロジェクトに設定」って、てっきり「VC++を起動した時に、勝手に
そのプロジェクトを開いてくれる」(ブラウザのスタートページに指定みたいな)機能」だと
思い込んでました。
これで前の練習用のコードを見返すのも楽になりそうです、ありがとうございました!!


290:デフォルトの名無しさん
09/12/31 23:52:43
入門レベルでそういう方法は非常に珍しいと思う。

291:デフォルトの名無しさん
10/01/03 23:39:44
フォームのスクリーンキャプチャをしたくて、下記のように書いたのですが、
コンパイルは通るのに、肝心の中身はキャプチャされていなくて真っ黒になってしまうのですが、
どうしてでしょうか?

いろいろ試したのですが、どうしても解決できないので、解決策を教えて下さい。よろしくお願いします。


Graphics^ g1 = this->CreateGraphics();

Bitmap^ img = gcnew Bitmap(this->Width, this->Height, g1);
Graphics^ g2 = Graphics::FromImage(img);

IntPtr dc1 = g1->GetHdc();
IntPtr dc2 = g2->GetHdc();
HDC hDC1 = static_cast<HDC>(dc1.ToPointer());
HDC hDC2 = static_cast<HDC>(dc2.ToPointer());

BitBlt(hDC2, 0, 0, img->Width, img->Height, hDC1, 0, 0, SRCCOPY);


292:デフォルトの名無しさん
10/01/04 21:18:20
ノートPCでVisualStudio2008を使いたいのですが、推奨解像度はどれくらいでしょうか?
実用的な解像度を教えていただけると助かります。

293:デフォルトの名無しさん
10/01/04 21:54:50
可能な限り大きいやつを。
XGAあれば何とか使えるが、高ければ高いほど能率上がる。


294:デフォルトの名無しさん
10/01/05 17:20:47
CStringで躓いているのですが教えていただけないでしょうか?
下記のようなソースで構造体にCStringを使っているのですが
そこに値をセットしようとするとメモリアクセス違反に
なってしまいます。どうにも問題ないように見えるのですが
何か間違いがあるのでしょうか?

typedef struct _st {
 CString cstr;
} ST;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
 void *hoge = malloc(sizeof(ST));
 ST *st;
 st = (ST *)hoge;
 st->cstr = "";
}


295:294
10/01/05 17:28:18
ごめんなさい。わかりました。

296:デフォルトの名無しさん
10/01/05 22:40:20
敢えて言おう。mallocを使うのはお勧めしない

297:デフォルトの名無しさん
10/01/06 03:56:35
>>291
DrawToBitmapはだめ?


298:デフォルトの名無しさん
10/01/06 07:29:32
CStringについて教えてください。
Cstring buff = "hogehoge";
buff = buff.Left(4);
とするとbuffを4文字で切れますが、これだと無駄にメモリを
使ってしまうと思います。
char *buff[10];
strcpy(buff, "hogehoge");
buff[4] = '\0';
みたいにぶつ切りできないでしょうか?

299:デフォルトの名無しさん
10/01/06 08:02:28
>>298
Truncateメンバ関数

300:デフォルトの名無しさん
10/01/06 08:11:53
>>299
ひゃっほー
ありがとう!

301:デフォルトの名無しさん
10/01/06 10:28:02
CStringからchar*への変換は下記のような方法があるようですが
このようにメモリをコピーする方法しかないでしょうか?
CString str = "test";
char *p = new char[str.GetLength()+1];
strcpy( p, str );
delete [] p;

char *p;
p = str.char_pointer();
みたいにできればありがたいのですが。



302:デフォルトの名無しさん
10/01/06 10:35:14
URLリンク(msdn.microsoft.com)

303:デフォルトの名無しさん
10/01/06 10:59:07
>>302
英語のリファレンスただ置くだけで回答だと思うなよ。てかCStringの日本語ドキュメントなかったっけ?

俺自身CStringあんまり使わないから仕様は詳しく知らないんだが、メンバ関数にoperator const char*()が存在してるなら

p = (char*)(const char*)str;

でいいんじゃないかと思った。
ただまぁせっかくCStringクラスを使っているんだから生のポインタなんて使わない処理にした方がいい気がするんだが。

304:デフォルトの名無しさん
10/01/06 11:05:00
>>303
うひょー
天才すぎる

305:デフォルトの名無しさん
10/01/06 11:15:02
>>303
いや、こいつ調べなさすぎだろ、と思って皮肉でURLだけおいたんだが。

306:303
10/01/06 11:18:02
>>304
ごめん俺何か変なこと言ったかな。皮肉られてる気がするんだが

307:デフォルトの名無しさん
10/01/06 11:20:11
>>306
いえ。とんでもない。助かりました。
VB厨なので調べるのも難しくorz

308:303
10/01/06 11:30:00
リロードしてから書き込むべきだった

>>305
そういうことかスマソ

>>307
ただの被害妄想だったか
参考までに今調べたら「CString ポインタ 変換」でまんまの解決策があったとだけ言っておこう

309:デフォルトの名無しさん
10/01/06 12:27:50
>>303
これならコピーした方がいいだろ。
内部へのポインタをconstはずして
使うとか、トラブルのもと。

310:デフォルトの名無しさん
10/01/06 12:28:54
>>307
const char* ではなく char* に変換するのが「書き換えたいから」という目的なら、
p = (char*)(const char*)str;
は危険。

書き換えないのなら
char* p ではなく const char* p にすればよいだけ。

311:デフォルトの名無しさん
10/01/06 17:51:37
>>297
助かりました。大変ありがとうございました。

312:デフォルトの名無しさん
10/01/06 18:22:14
298の
buff = buff.Left(4);
これってまずくないの?
(298はTruncateを使うようにしたみたいなんで分岐した話として)

313:デフォルトの名無しさん
10/01/06 22:15:04
>buff = buff.Left(4);
>これってまずくないの?

なぜまずいと思ったのか言ってごらん。

314:デフォルトの名無しさん
10/01/06 22:19:01
>>312
それは別に問題ないんじゃないの?

Truncateって知らんからMSDN見てみたけど、載ってない。
なんでだ。
URLリンク(msdn.microsoft.com)(VS.80).aspx

315:デフォルトの名無しさん
10/01/06 23:03:24
教えてください。

VC2003 でアンマネージなプロジェクトに一部マネージを混ぜて使ってます。
(ファイルごとのプロパティで /clr をつけてます)

ここで、アンマネージの関数(クラスの静的メソッド)の引数にマネージオブジェクト
(System::Cllectios::ArrayListなど)をつけて普通に呼び出す分には問題なく実行できます。
が、この関数を関数ポインタ経由で呼ぼうとすると例外が発生して不正終了します。
以下のようなコトをしたいのです。
アンマネージの関数ポインタ?がマネージオブジェクトの引数に対応してないのでしょうか。

void func( System::Collections::ArrayList* list )
{}

void hoge()
{
System::Collections::ArrayList* list = __gc new System::Collections::ArrayList();
void(*test)( System::Collections::ArrayList* ) = func;

func( list ); // ok
(*test)( list ); // ng
}

316:デフォルトの名無しさん
10/01/07 01:27:25
>>314
CStringTの基底クラス、CSimpleStringのメンバ。
URLリンク(msdn.microsoft.com)

>>315
<gcroot.h>をインクルードして、funcとtestの型をgcroot<Systaem::Collections::ArrayList*>にしたらきちんと動いているようだった。
ちなみに、VC++ 2008では元のコードのままで動いた。おそらく2005でもそうだと思う。

> アンマネージの関数ポインタ?がマネージオブジェクトの引数に対応してないのでしょうか。
これが原因だと思う。gcroot<>自体はアンマネージ型で、
アンマネージクラスにマネージクラスオブジェクトを置きたいなどというときに使える。

317:デフォルトの名無しさん
10/01/07 09:27:14
CStringみたいな途中でサイズ変る前提のやつは
ブロック単位でメモリ管理してるから
ちまちまバイト単位でメモリ節約しても何の意味もなかったと思う。

318:デフォルトの名無しさん
10/01/07 11:42:49
C++でdllを作成しています。
他のdllをリソースとして、自分が今作成しているdllに組み込むことは可能でしょうか?

具体的には、SQLiteのdll、sqlite3.dllを自分が作成しているdllにリソースとして組み込みたいと思っています。

319:デフォルトの名無しさん
10/01/07 12:09:51
組み込まなくても使えると思うけど、ばれないようにパクリたいということ?

320:318
10/01/07 12:38:38
>>319
返信ありがとうございます。簡単にいうとそうです。
sqlite3.dllを使用していることをバレるのが困るというより、
sqlite3.dllを使用しているので SQLite形式のファイルをどこかで使かわれていることが、簡単にばれるのが少し困るので
この方法を考えています。バイナリで見られたらすぐにわかりますが(笑

リソースとしてdllを読み込む方法を知らなかったので質問しました。 可能ということでよろしいでしょうか?




321:デフォルトの名無しさん
10/01/07 12:40:41
sqliteってソースあるね。あれを取り込んだら?

322:319
10/01/07 15:28:18
>>321

・・・オープンソースがあることを知りませんでした・・・
ありがとうございます。 それを使ってみますm(_ _)m

323:312
10/01/07 16:13:18
>>313,314
i=i++; と似た匂いを感じてしまったんだが、考え直してみたら i=i+1; と同じか。
Left()はconstだからいいんだな。

324:315
10/01/07 21:25:27
>>316
それで出来ました。
すごく助かりました。これで似たようなコードをあちこちに置かなくてすみます。
ありがとうございます。

325:デフォルトの名無しさん
10/01/08 22:14:12
回転寿司でお稲荷さんが回ってなかったから注文したら、
渡されるところで隣に座ってた人に横からお稲荷さん取られた
それは私のお稲荷さんだ!って言ったら反対側に座ってた人がイクラを噴出した
私も一瞬後で気づいて、たぶん顔真っ赤になってたろうけど全部食べた

326:デフォルトの名無しさん
10/01/09 20:11:17
みなさんはCStringを使わないとのことですが
何を使っているのでしょうか?

327:デフォルトの名無しさん
10/01/09 20:34:35
>>326
いや、ふつーに使ってるよ。
使わないって半可通だろ?

328:デフォルトの名無しさん
10/01/09 22:06:28
へー

329:デフォルトの名無しさん
10/01/09 22:20:25
std::string

330:デフォルトの名無しさん
10/01/10 06:55:30
>>327
Windowsプログラマはそうだろうけど。

・・・ま、ここはVCのスレだし、いいのか・

331:デフォルトの名無しさん
10/01/10 18:15:33
解決法を教えてください。
MS VisualC++2008でcvBlobを使おうとしたのですが、エラーがでてビルドが完了しません。(下記にエラーメッセージ)
OpenCV1.0は既にインストールしてあり、PC上での動作は確認してあります。
OSはWindows XP SP3です。
足りない情報がありましたら教えてください。
よろしくお願いします。

////////エラーメッセージ//////////

\cvblob.cpp(27) : fatal error C1083: include ファイルを開けません。'opencv/cv.h': No such file or directory
opencv\cv\include\cvcompat.h(784) : warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。
test.cpp(3) : fatal error C1083: include ファイルを開けません。'cvblob.h': No such file or directory
cvlabel.cpp(27) : fatal error C1083: include ファイルを開けません。'opencv/cv.h': No such file or directory


332:デフォルトの名無しさん
10/01/10 18:40:11
文字コードはとりあえずおいといて、
インクルードパスの設定の仕方をだな

333:デフォルトの名無しさん
10/01/11 03:13:23
>332
cvBlobは使いたいプロジェクトのディレクトリに入れるだけでOK…
という話を見たのですが、インクルードパスの設定が必要になるんですね。
もう少し格闘してきます。
アドバイスありがとうございました!

334:デフォルトの名無しさん
10/01/11 04:52:44
全くの初心者ですが教えてください。

まず適当に設置したボタンをクリックするとエディットボックス1(m_edit1)に表示されている文字列のうち、マウスでドラッグして選択した部分のみを別のエディットボックス2(m_edit2)に表示させたいです。
次にm_edit2に表示された文字列を取得してgoogle検索やWikipedia検索をさせるボタンを配置したいです。

わからないことは以下の二つ
1.選択文字列を取得して、新たに定義したCStringにコピーする方法
2.任意の文字をgoogle、wikipedia検索させる方法

2に関してはVC++じゃないような気もするのですが、教えてください…

335:334
10/01/11 07:35:08
すみません自己解決しました

336:デフォルトの名無しさん
10/01/11 13:25:04
VC++2008EEでCTRL+ALT+DLLを無効にするGINAを作成したく

URLリンク(7ujm.net)

上記にあるサンプルをビルドしてXP pro sp3に入れてみましたが
「MSGINA.DLLを読み込めませんでした」と出てログオンできません。
初心者でソース自体に不備があるのか、ビルドの仕方が悪いのか判断できない状況です。

アドバイスお願いします






337:デフォルトの名無しさん
10/01/11 13:42:32
そんなこともわからない人が手を出すのは危険だと思うが
ビルドした時とインストールしたものは同じ環境?
まずは普通にDLL作って普通に動作させるとこからやってみては

338:デフォルトの名無しさん
10/01/11 13:43:26
もし違う環境ならDLLの前にEXEもやってみて

339:336
10/01/11 14:38:41
>>337
アドバイスありがとうございます。

インストールしたものは別環境です。
たしかに仮に動かせたとしても今の私では危険ですね。

VB厨なので敷居は高く感じますが、ものぐさせずに一からやってみます。

340:デフォルトの名無しさん
10/01/11 14:58:11
環境違うのなら、まずはReleaseビルドとランタイムライブラリ関連かな
とりあえずデフォルトが/MDなのでredist入れるか/MTにするかかな。

341:336
10/01/11 16:17:00
>>340
/MTに変更して動作しました。
ありがとうございました!



342:デフォルトの名無しさん
10/01/12 08:21:46
exeを下記のような動きにする場合はどのようにすればいいのでしょうか

・exe実行時の引数に何も指定しなかった場合はFormを表示してwindowsアプリとして振舞う
・exe実行時の引数に特定のコマンドが指定されていた場合はFormを表示せず
動作を実行したのち終了

開発環境はvc++ 2008 Express Edition SP1です



343:デフォルトの名無しさん
10/01/12 08:40:11
>>342
lpCmdLineに文字列があるかどうかで分岐させればいいんじゃないの?

344:デフォルトの名無しさん
10/01/12 09:37:25
>>343
ありがとうございます。
できました

もしかして・・・vc++ 2008 Express Edition SP1の場合CLRを使わないと
Formなどを使うことはできませんか?


345:デフォルトの名無しさん
10/01/12 09:42:59
>>344
Express Editionにはリソースエディタついてないからな

346:デフォルトの名無しさん
10/01/12 10:12:25
Formは.net専用

347:デフォルトの名無しさん
10/01/12 15:04:44
>>344
窓アプリ作れるかって事ならできるよ
やりかたは↓でわかるよ
URLリンク(www.kumei.ne.jp)

348:デフォルトの名無しさん
10/01/12 20:05:27
今日windows7が家に届いて、c++を本格的に勉強しようと思っています
おすすめのコンパイラってあります?

349:デフォルトの名無しさん
10/01/12 20:13:00
>>348
Visual C++ 2008 Express Edition

350:デフォルトの名無しさん
10/01/12 20:42:11
>>348
GNU C++コンパイラ (G++)

351:デフォルトの名無しさん
10/01/12 21:25:37
char a = "no";
string s;
s = "aho"+a+"sakata";

↑はエラー出るけど、こんな感じの書き方はできませんか?
+= や copy使うとパッと見すごく分かりづらいです。
char aをstring型で複製するのも嫌です。

352:デフォルトの名無しさん
10/01/12 21:34:21
char a = "no";

この時点でなぁ

353:デフォルトの名無しさん
10/01/12 21:43:01
char* a = "no";
std::string s;
s = std::string("aho")+a+"sakata";

こんなんで?

354:デフォルトの名無しさん
10/01/12 21:51:29
>>353
ありがとうございます
まさにこんなのです

355:デフォルトの名無しさん
10/01/14 20:46:30
if(a = b + c){ }
とやったら、b + c != 0の場合にif文の中に入るんでしょうか?

356:デフォルトの名無しさん
10/01/14 21:49:01
そうだよ。

357:デフォルトの名無しさん
10/01/14 22:41:59
>>355
まあa, b, cは組み込み型だよね?
そうじゃないとしたら+や=のオーバーロード次第でなんとでもなる。

358:デフォルトの名無しさん
10/01/18 11:07:28
教えてください。

VisualC++6.0で他人が作ったものを修正することになりました。
現在はVisualC++2005しかないため、6.0のdspファイルを開き2005用に変換しました。

プロジェクト→プロパティ→MFCの使用で、
「スタティックライブラリで使用」を選択し、ビルドしたところ、
下記のようなエラーが出てしまいます。

1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) は既に LIBCMTD.lib(dbgdel.obj) で定義されています。
1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) は既に LIBCMTD.lib(delete2.obj) で定義されています。
1>.\Debug/lc8_kensa.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。

「共有DLLで使用する」を選択すれば、ビルドできます。
(もちろん警告は山のようにでますが・・・)

原因と解決方法を教えて頂けますか?


また、取り急ぎ、「共有DLLを使用する」でビルドしたアプリケーションを配布し、
実行したところ、「例外 不明なソフトウェア例外(0xc0000409)がアプリケーションの0x00411741で発生しました」
と表示され、エラーとなってしまいます。

この原因は「スタックライブラリで使用」にしてないので、起こったと思っているのですが、
違いますか?

よろしくお願い致します。


359:デフォルトの名無しさん
10/01/18 12:50:00
>原因と解決方法を教えて頂けますか?

エラーも警告も無視せずに対処しよう

360:デフォルトの名無しさん
10/01/18 13:33:08
>エラーも警告も無視せずに対処しよう

対処したいのですが、原因がわからず、対処方法がわかりません。
教えて頂けないでしょうか?
警告に関しては原因がわかっておりますので、対処したいと思います。

361:デフォルトの名無しさん
10/01/18 13:52:06
元のやつの設定がどうなってるかわからんが、
プロジェクトのプロパティのコード生成のランタイムライブラリのあたり弄ってごらん

362:デフォルトの名無しさん
10/01/18 14:47:34
仕事の手伝いはお金を払ってもらわないとな

363:デフォルトの名無しさん
10/01/18 17:25:33
>>361
ランタイムライブラリを適当にいじってみましたが、残念ながらうまくいきませんでした。

>>362
すいません。仕事じゃないです。
私事です。すいません。。。

364:デフォルトの名無しさん
10/01/18 17:34:39
自分で作ったやつじゃなくて他人が作ったやつをいじりたいとか
正直ソフト板あたりでやってほしいと思う、

365:デフォルトの名無しさん
10/01/18 17:41:42
>>363
とりあえず、何をどうしたか全部書け。
まずはビルドするとき、クリーン→リビルドでやれ

366:デフォルトの名無しさん
10/01/18 18:03:25
>>364
すいません。ソフト板っていうのがあるんですか!?
初心者でよく知らず、申し訳ありません。

>>365
まず、6.0で作成されたプロジェクトをフォルダごと、自分のプロジェクトフォルダに移しました。
\\My Documents\Visual Studio 2005\Projects\***
という具合です。
そこで、dspファイルを開くと、

プロジェクト '***.dsp' は現在の Visual C++ プロジェクト形式に変換されなければなりません。変換した後、このプロジェクトを旧バージョンの Visual Studio で編集することはできません。
変換してこのプロジェクトを開きますか?

と出てくるので、「はい」を選択して開きました。
これの「MFCの使用」を「スタティックライブラリ」に選択すると、
>>358のようなエラーが出てしまいます。。。

クリーン→リビルドでやるので正しいやり方なんですね!
これまではビルドしかしてませんでした。。。
勉強になります。
ありがとうございます!

367:デフォルトの名無しさん
10/01/18 18:09:29
そのソースをうpすればコンパイルしてやらんこともないよ

368:デフォルトの名無しさん
10/01/18 18:29:14
正しいやり方つーか、、、設定変えたら状況によっては必要。
これではまるやつも多いので・・・

369:デフォルトの名無しさん
10/01/18 19:08:27
それよりVS2010と.NET4で開発すると中途半端なのを何とかしてくれ。
WCFやEntityFramework4を使ったプロジェクトで作成しても、開発環境内でしか動作しない。
IISでホストできない構成ファイルとかアセンブリ参照とか、、、もう鬱になる。

370:デフォルトの名無しさん
10/01/19 05:16:27
完全に初心者ですが、困っています。
助言よろしくお願いしますorz

VC++6.0にて、
あるプログラムの閾値をスライダーで調整できるようにしろ、との実習が出たのですが、
ResourceViewタグのDialogでウィンドウ内にスライダーを作ったところでつまずいています。

スライダーとプログラムはどうすれば関連付けられるのでしょうか。

371:デフォルトの名無しさん
10/01/19 09:22:15
ボタン、テキストボックス、その他コントロールと同じ

372:デフォルトの名無しさん
10/01/19 10:05:34
VS初心者じゃなくプログラミング初心者でVS等無料ツールを使いつつ学習できるサイトありますか?

373:358
10/01/19 11:37:32
スタティックでビルドできました。

参照URL:URLリンク(support.microsoft.com)

プロジェクト→プロパティ→構成プロパティ→リンカ→入力を選択
「特定のライブラリの無視」に Nafxcwd.lib Libcmtd.lib を入力
「追加の依存ファイル」にも Nafxcw.lib Libcmt.lib を入力

で、ビルド成功しました!
皆様、アドバイスありがとうございました!

しかーし!!
「例外 不明なソフトウェア例外(0xc0000409)がアプリケーションの0x00411741で発生しました」
と表示され、エラーとなってしまいます。
ググってみても、SPのバージョンが低いとかセキュリティの問題と出てきますが、
他に考えられる原因はありますか?




374:デフォルトの名無しさん
10/01/19 11:58:10
いろいろ間違ってるw

375:373
10/01/19 13:51:25
>>374
いろいろって何ですか?
教えてくらはい(>_<)

376:デフォルトの名無しさん
10/01/19 14:00:44
>>375
いやです(>_<)w

377:デフォルトの名無しさん
10/01/19 20:09:19
ものすごく初心者なのでサルにもわかるようにお願いします
ドキュメントにhellowprld.cppといファイル名でテキストで
#include <iostream>
using namespace std;

int main()
{
cout << "Hello world!" << endl;

return 0;
}
と入力、helloworld.cppという名前で保存
Visual C++ 2008 Express Editionのコマンドプロントを開いて
[cd \]と入力さらに[cd cpp]とうつと指定されたパスが見つかりませんになります
なぜでしょうか?



378:デフォルトの名無しさん
10/01/19 20:23:18
保存したところにcdしろよ

379:デフォルトの名無しさん
10/01/19 20:25:26
[cd cpp]と打つ前に、[mkdir cpp]と打ってみたらどうですか。

380:デフォルトの名無しさん
10/01/20 12:01:19
>[cd \]と入力さらに[cd cpp]とうつと指定されたパスが見つかりませんになります
>なぜでしょうか?

ドライブが違うんだろ

381:デフォルトの名無しさん
10/01/20 12:25:25
いやいやいやいや、そもそも
>helloworld.cppという名前で保存
この保存場所さえ把握してないのではw

382:デフォルトの名無しさん
10/01/20 12:27:26
>>372
プログラムを学習できるサイトならググればいくらでもあるよ。
VisualStudioの使い方なら↓を参照。
URLリンク(www.atmarkit.co.jp)
URLリンク(msdn.microsoft.com)

383:デフォルトの名無しさん
10/01/20 12:28:30
>>372
プログラムを学習できるサイトならググればいくらでもあるよ。
VisualStudioの使い方なら↓を参照。
URLリンク(www.atmarkit.co.jp)
URLリンク(msdn.microsoft.com)

384:デフォルトの名無しさん
10/01/25 11:49:20
僕のVisual C++では#pragma region hoge が働いてくれません。
2005からの機能らしいですけど、2005のアカデミックバージョンは対象外ですか。
関数の定義など、他の部分でのコードの折り畳みはできるんですが……。

385:デフォルトの名無しさん
10/01/25 16:39:39
VC2008 Expressを使ってみたのですが、
Windowsフォームアプリケーションで作るとC++/CLIになるのですね?
CLIを使用しないで、フォームを使用したアプリケーションを作成するには、どうしたら良いのでしょうか?

386:デフォルトの名無しさん
10/01/25 16:45:00
無理。フォームは.NET Frameworkの一部
ダイアログリソースということなら、外部のリソースエディタ使って組み込むのはできる。

387:デフォルトの名無しさん
10/01/25 16:59:28
>>385
std買ってMFC

388:385
10/01/25 17:04:27
ありがとうございます。
C++/CLIでは.NET用のライブラリしか使えず、C++用のライブラリを使用したいのですが、
どうやって作成していいのか混乱してしまって・・・。

ダイアログソースで作成する場合、どのようなリソースエディタを使用すれば良いのでしょうか?

389:デフォルトの名無しさん
10/01/25 17:30:51
>>384
自分もVS 2005のアカデミックで今試してみたけど、
#pragma region hoge ~ #pragma endregionは使えているよ。
何か間違えていない?

390:デフォルトの名無しさん
10/01/25 17:40:13
>>388
>>387がいいとは思うけど、リソースエディタでググれば2,3種類くらいに絞れると思うよ。
組み込むには、VC++EEに付属のrc.exeをビルドイベントとかで設定してやればいい

391:385
10/01/25 18:03:01
>>387
>>390
ありがとうございます。
MFCがどんな物か、VS2010βを使用してみたのですが、MFCで作成しようとするとなんかややこしそうですね。

リソースエディタはresEditを使用している人が多そうですね。
URLリンク(www.hor-net.org)
ここの説明わかりやすかったので、使ってみようと思います。
ありがとうございました。

392:384
10/01/25 18:03:01
// main.cpp
#include <windows.h>
int function(int n) {
return n * 2;
}
#pragma region hoge
int WINAPI wWinMain(HINSTANCE, HINSTANCE, LPWSTR, int) {
return func(0);
}
#pragma endregion

こういう単純なコードですら、働いてくれません。しかも、この場合だとwWinMainまで死にます。
このコードに間違いはありますか?

393:デフォルトの名無しさん
10/01/25 18:38:36
デバッガのウォッチウィンドウでstd::vecterなどを見ると、単純にクラスメンバが表示されるのではなく、配列の要素数などが一目で分かる形で書かれているのですが、あれはどういう方法を使っているのですが?

394:393
10/01/25 18:39:56
×vecter
○vector
恥ずかしい死にたい

395:393
10/01/25 20:04:15
×使っているのですが
○使っているのですか

もう俺死んだ方がいい

396:デフォルトの名無しさん
10/01/25 20:17:27
ちょっと訛っただけだろ?w
細けえことは気にすんな!

397:デフォルトの名無しさん
10/01/26 00:54:54
VC2008ExpressEdition .Net環境でFormにスクロールバーを出して使おうとしています。
HorizontalScroll->Valueの値をスクロールイベントでいじっても0に戻ってしまいます。
回避する方法はないものでしょうか?

Formにはその他のコントロールは一切無し、したがってAutoScrollはFalseです。
Show時にHorizontalScrollをVisibleにしてファイルをドロップした段階でEnableにします。

デバッグ用に値を観察しているのですが、スクロールイベント終了時には値は正常なようです。
しかし再度イベントが発生した時にValueが0からやり直し、といった具合です。

主な目的は画像の貼り付けと表示です。
よろしくお願いします。

398:デフォルトの名無しさん
10/01/26 09:51:24
やりかた間違ってんじゃないの

399:デフォルトの名無しさん
10/01/26 22:19:11
VS 2005 SDI MFC です
現在View に表示されているテキストが、ファイルから読みこんだものか、
それ以外(コピペまたは、キーボードからの入力)を識別するAPI や方法があれば教えてもらえないでしょうか。

400:デフォルトの名無しさん
10/01/28 04:53:40
ちょっと調べていて疑問に思ったんですが、
MSペイントのキャンバスサイズをアンカーポイント?でつかんでサイズを自由に変更できるようになっているんですが、
あの処理は一から自分で組まないといけないのでしょうか?
それとも設定するだけで簡単に組み込めるようなクラスなどがあるのでしょうか?

401:デフォルトの名無しさん
10/01/28 20:02:24
Visual C++を初めて使っている者です。
私はC++でなく、C言語でプログラミングをしたいのですが、
どのように操作すればソースをコードできるのでしょうか。

教えて下さい。お願いします。

402:デフォルトの名無しさん
10/01/28 20:07:37
>>401
.cっていう拡張子のファイルにソースを書いて開けばビルドできるんじゃなかった?

403:401
10/01/28 20:11:24
VC++のデバッガの機能を使用するから、VC++上にコードかけって言うんです。

404:デフォルトの名無しさん
10/01/28 20:52:34
ソリューションエクスプローラのプロパティ→C/C++→詳細→コンパイル言語の選択
でも指定できる。
プロジェクト全体でもファイル個別でも。

405:デフォルトの名無しさん
10/01/30 22:55:41
VC++のデバッガを使うこととVC++上でコードを書くことはイコールにならんがな
{devenv,vcexpress} /debugexe hoge.exeでいいわけで

406:デフォルトの名無しさん
10/01/31 13:35:27
独学でやってるなら入門書に書いてある通りにやればいいだけなんだが、
誰かに指示されてるならそいつに聞けよ。

407:デフォルトの名無しさん
10/02/02 10:43:09
test

408:デフォルトの名無しさん
10/02/09 00:39:19
スレ違いだったらすいません。

一週間くらい前からプログラミングに興味を持ち、C++2008をダウンロードして
やっているのですが、初めてのプログラミングはこのソフトからでいいのでしょうか?
ほかにもっとわかりやすいのがありました教えて欲しいのですが・・・

409:デフォルトの名無しさん
10/02/09 01:46:52
とりあえずそれでいいっていうか「何を作りたいか」目的がはっきりしてた方が良い
「そのために何が必要か」ってアプローチが結果的に早道になると思う

410:デフォルトの名無しさん
10/02/09 07:22:29
から、って言うけど別ので初めて後からVC++を使う気か?
どうせ使う気があるなら最初からVC++で慣れればいいじゃん

411:デフォルトの名無しさん
10/02/09 10:58:36
>>408
悪いことはイワン
C#にしとけ


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch