くだすれVisual C++(超初心者用)その3

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
Visual C++使いが優しくコメントを返しますが、
お礼はVisual C++の布教と初心者の救済をお願いします。

■過去スレ
前スレ
http://pc8.2ch.net/test/read.cgi/tech/1141087248/

前々スレ
http://pc8.2ch.net/test/read.cgi/tech/1135817069

■遠い親戚スレ
くだすれC++/CLI(初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1142144110/l50

■関連ページ
Visual C++ Home Page
http://www.microsoft.com/japan/msdn/visualc/

2デフォルトの名無しさん:2006/06/12(月) 22:59:30
質問させてください。
Visual C++ Proffesional EditionでC++のプロジェクトでコーディングをしているのですが、
急にデバッグする時、ブレークポイントにきちんと停止してくれなくなってしまいました。

ブレークポイントは現在の設定ではヒットしません。ソースコードが元のバージョンと異なります。
と言われます。

ググってみると
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vsdebug/html/vxtskDebuggingClassLibraries.asp

デバッグをどの方法で始める場合でも、クラス ライブラリのデバッグ バージョンを先にビルドして、
アプリケーションが参照する場所にデバッグバージョンを配置するようにします。
この手順を忘れると、アプリケーションが別のバージョンのクラスライブラリを参照して読み込む可能性があります。
その場合、プログラムは実行を続け、設定されたブレークポイントにヒットしません。

という記述が関連していそうな気がするのですが、よく意味がわかりません。

分かる方、アドバイスお願いします。
3デフォルトの名無しさん:2006/06/12(月) 23:07:09
>>1
4デフォルトの名無しさん:2006/06/13(火) 01:56:07
VC++について質問させて頂きます。
関数でCStringのポインタを使って、直接文字列をいじりたいんですけど、
それをやろうとしてもエラーが出たりします。本を見たりネットを見たりして
色々と試したんですが、どれもうまくいきません。
char型のように関数で文字列を直接扱うことはできるんでしょうか?
5デフォルトの名無しさん:2006/06/13(火) 02:02:49
>>4
できるよ
どう扱うのかわからんからサンプルくれ

あと、

 CString str;
 strcpy( &str, "hoge" );

とかはするなよ!絶対!!
6デフォルトの名無しさん:2006/06/13(火) 02:31:35
int Strcmp(char* text, char* pattern){int index;
for(int i = 0; pattern[i] != NULL; i++){
if(index = text[i] - pattern[i] != 0) break;
}return index;}
char* Strstr(char* text, char* pattern, int len, int n){
char* end = text + len - n + 1;
while(text != end){
if(Strcmp(text, pattern) == 0) return text;
text++; } return NULL;}
void table(char* pattern, int* TABLE){
int x = 1, y = 0; TABLE[0] = 0;
while(pattern[x] != NULL){
if(pattern[x] == pattern[y]) TABLE[x++] = ++y;
else{ if(y == 0)TABLE[x++] = y;
elsey = TABLE[y];}}
char* bmp(char* text, char* pattern, int len, int n){
int y = 0; int* TABLE = new int[strlen(pattern)];
table(pattern, TABLE);
while(*text != NULL){
if(*text == pattern[y]){text++;
if(pattern[++y] == NULL)return text - n;
}else{ if(y == 0)text++;
elsey = TABLE[y - 1];
} } return NULL; }
void main(){
char a[] = "fhsoeriojtotetototo"; char b[] = "totetototo"; char* c; char* d;
int len = strlen(a); int n = strlen(b);
c = Strstr(a, b, len, n);//単純法 d = bmp(a, b, len, n);//KMP法}
こんな感じで、charのところをCStringを使って扱いたいわけです。
7>>6です:2006/06/13(火) 04:03:21
>>5

えっと、ダメでしょうか?
すみません。見づらいとは思いますが、お願いします。
8デフォルトの名無しさん:2006/06/13(火) 07:11:46
>>7
それは止めたほうがいいよ。引数の char* を const char* にすれば CString を
(暗黙のキャストで)渡せるようになるから、それくらいで満足しておくべき。
UNICODE でもOKにするなら const TCHAR * で。
9デフォルトの名無しさん:2006/06/13(火) 08:18:02
すみません。教えてください。SDIで表示したBitmapを任意で360度自由に回転させたいのですが、どうすればいいのでしょうか??

教えてください。携帯からですみません。
10デフォルトの名無しさん:2006/06/13(火) 10:57:53
>>9
自分で計算して描画 or DirectXを使う
11デフォルトの名無しさん:2006/06/13(火) 13:51:44
>>8

つまり、const char* 以外の方法は無いって事でしょうか?
CStringで文字列を格納して、関数で受けるときはcharを使った方が良いという事でしょうか?
12デフォルトの名無しさん:2006/06/13(火) 14:06:41
const char * Strstr(const char * a, const char * b);
CString a = "fhsoeriojtotetototo";
CString b = "totetototo";
const char * c = Strstr(a, b);
// でいいじゃん。で、文字列長はStrstr()内でstrlen()すればいいし。
//# 文字列長を引き数で渡す積極的理由があるならそれはそれでいいが。
13デフォルトの名無しさん:2006/06/13(火) 14:41:20
>>12
なるほど〜
文字列長を引数で渡しのは検索を連続で行うためなんですよ。もっと長い文字列ときに同じ単語がいくつかでるので、
関数内でだと、strlenが何度も呼び出されるからです。
って、参考にしたサイトで書いてましたw

あと、CString.FindやReplaceで検索や置換を行った方が処理は早いんでしょうか?
それとも、BM法でやった方が処理は早いんでしょうか?

質問ばかりですみません。お願いします。
14デフォルトの名無しさん:2006/06/13(火) 15:11:11
別のところで質問し、スレ違いと知りこちらにやってまいりました。
ユーザー関数の戻り値が帰ってくるまでの時間がランダムの
場合、その戻ってくる時間分だけ待機させるのってどうしたらいいでしょう?

CheckISSError :ユーザー関数

for( i = 0 ; i < 15 ; i++){
 iRet = CheckISSError( i );
 if(iRet < 0){
  エラーの場合の処理
 }
 ::Sleep(700);
}

現状では ::Sleep(700); をいれることでもたつきますが正常に動作してます。
WaitForSingleObjectを使用すればいいのでは?とご教授頂いたのですが
どのように利用すればいいのかもわからない状態です。
何方かご存知の方 ご教授願えませんでしょうか?
15デフォルトの名無しさん:2006/06/13(火) 15:13:02
>>13
CStringならGetLengthで文字数が得られる。

元がbmp(a, b, len, n);なんだろ。
そこへ自分で多重定義してやればいいだろ。

const char* bmp(const char* a, const char* b)
{
    return bmp(a, b, std::strlen(a), std::strlen(b);
}

const char* bmp(const CString& a, const CString& b)
{
    return bmp(a, b, a.GetLength(), b.GetLength());
}
16デフォルトの名無しさん:2006/06/13(火) 15:42:23
>>15

なるほど。多重定義ですか!
全然思いつかなかったw

大変勉強になりました☆ありがとうございます☆
17デフォルトの名無しさん:2006/06/13(火) 17:19:41
>>13
strlen程の速度を気にするんだったら、
CStringを使わずchar*とintで文字列と文字数を渡してやる方がよくね?
18デフォルトの名無しさん:2006/06/13(火) 19:48:18
>>10

>>9です。なんとか解決しました。ありがとうございました。
19デフォルトの名無しさん:2006/06/13(火) 20:05:10
VC++2005で普通にhello worldみたいなコンソール出力用のプログラムを作成したのですが、
コマンドプロンプトに出力されません。
どこか設定おかしいのでしょうか?

よろしくお願いします。
20デフォルトの名無しさん:2006/06/13(火) 20:10:08
>>19
貴方の頭の設定がおかしいんですよ。
21デフォルトの名無しさん:2006/06/13(火) 20:25:25
CStringを扱っているのですが.
ある関数でDebugモードでは正常に機能するのに
Releaseモードでは戻り値が空になって返ってくるようになってしまいました.

ちなみに,その現象がお起こるファイルは,
ブレイクポイントにて
現在実行されていると表示されている行と
実際実行されている行とでは数行の開き
(実際は5〜7行崎を実行中)
があるようなのです(MesseageBoxにて確認)
このような症状ってどうやれば直るのでしょうか?
22デフォルトの名無しさん:2006/06/13(火) 20:30:44
>>19
プロジェクトを作るときには何を選んだ?
ただのC/C++ならWin32コンソール アプリケーションだよ。
23デフォルトの名無しさん:2006/06/13(火) 20:45:55
>>21
全てリビルド。
GetBuffer / ReleaseBuffer しないで書き込んでるとか、
その類のことではないだろうか。
2421:2006/06/13(火) 22:07:30
>>23
リビルドしても,Release/Debugフォルダ全消去しても同じでした.
GetBufferというか,CStringそのままでしか使っていないので関係ないと思いますが...
ほかに何かないでしょうか?
2519:2006/06/13(火) 22:22:51
>>22
もちろんプロジェクトはWin32コンソールアプリケーションです。
で、設定でコンソールアプリケーションを選択。
追加オプションの空のプロジェクトにチェック入れました。
26デフォルトの名無しさん:2006/06/13(火) 22:26:35
>>21
ReleaseビルドでBreakPointがずれているように見える現象は、最適化ゆえ。
Releaseビルドでも最適化しないようにすればずれないよ。
27デフォルトの名無しさん:2006/06/13(火) 22:57:31
>>19
ちゃんと標準出力に出力してる?
標準出力のハンドルは合ってる?って普通は合ってるやな
2819:2006/06/13(火) 23:19:26
念のためソース↓
#include<iostream>
using namespace std;

int main(){
cout << "Hello World" << endl;
return 0;
}
29デフォルトの名無しさん:2006/06/14(水) 00:27:06
>>17
そうですねぇw
それは確かに思いました。
ただ、どっかのサイトで統一した方が良いと書いてありましたのでw
17さんなら、どうしますか?
30デフォルトの名無しさん:2006/06/14(水) 00:38:28
>>9さん
http://www.sm.rim.or.jp/~shishido/kaiten.html
↑でBITMAP回転処理を解説されていますよみましたか?
3117:2006/06/14(水) 00:40:07
自分なら>>12

速度が必要なら自分でゴリゴリ書くけど
そうじゃないなら汎用性と読みやすさ重視だね。

そーいやstl::stringを使うという選択肢もあるな
32デフォルトの名無しさん:2006/06/14(水) 01:31:48
>>17
なるほど〜 うまくいきました☆

で、さらに問題が・・・検索した文字列を置換をしたいんですが、
constを外すと、当然なんですが、エラーが出ます。
この場合はどうしたら良いでしょうか?
33デフォルトの名無しさん:2006/06/14(水) 01:58:13
ちょっとおかしな現象なんだが、
class A
{
template < int T > void F();
template <> void F<0>F(){...};
}
なんてコードを書くと、クラスビューにこのクラスが認識されなくなるんだが。
これって俺だけ?
ちなみに特殊化したFを消すと再認識される

3433:2006/06/14(水) 01:59:19
;がないってのは突っ込まんで。
35デフォルトの名無しさん:2006/06/14(水) 02:04:09
すみません、このプログラムの境界条件Tの宣言がうまくいきません。
どこをどう直せばよいのでしょうか?

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define NX 41
#define NY 41

void SetBoundaryCondition(double T[NY][NX])
{
int x;
int y;
for (x = 0; x < NX; x++)
{T[0][x] = 0.5;}
for (x = 0; x < NX; x++)
{T[NY-1][x] = 0.0;}
for (y = 0; y < NY; y++)
{T[y][0] = 1.0;}
for (y = 0; y < NY; y++)
{T[y][NX-1] = 0.0;}

*つづく*

36デフォルトの名無しさん:2006/06/14(水) 02:06:25
*つづき*

int main(void)
{
const double dx = 1.0 / NX;
const double dy = 1.0 / NY;
const double C1 = 0.5 * dx*dx / (dx*dx + dy*dy);
const double C2 = 0.5 * dy*dy / (dx*dx + dy*dy);
int i;
int j;
double errorMax;
double previousValue;
SetBoundaryCondition(T[NY][NX]);
do
{
errorMax = 0.0;
for (i = 1; i < NY-1; i++)
{
for (j = 1; j < NX-1; j++)
{previousValue = T[i][j];
T[i][j] = C1*(T[i+1][j] + T[i-1][j]) + C2*(T[i][j+1] + T[i][j-1]);
if (errorMax < fabs(T[i][j] - previousValue))
{errorMax = fabs(T[i][j] - previousValue);}}}
} while (errorMax > 0.00001);
for (i = 0; i < NY; i++)
{for (j = 0; j < NX; j++)
{printf("%d\t%d\t%15.15f\n", j, i, T[i][j]);}
}
return 0;}

よろしくお願いします。
37デフォルトの名無しさん:2006/06/14(水) 02:55:59
>>32
CStringで+していくか、出来上がったバッファをCStringに代入。
前者:
CString foo = "abc";
foo += "def";
後者:
CString foo = "abc";
char buf[20];
sprintf(buf, "%sdef", foo);
foo = buf;
38デフォルトの名無しさん:2006/06/14(水) 07:26:51
>>32
だったらCString&なんかを渡せばいいだろ。
39デフォルトの名無しさん:2006/06/14(水) 08:34:49
>>32
置換じゃ置換後の文字列長さが不定なので全然違ってくる
お手軽にやりたいんならCStringを渡すのが楽。
CStringを使わないなら自分で領域確保してそのアドレスを戻す。
40デフォルトの名無しさん:2006/06/14(水) 08:37:00
>>35
どこがうまくいかない?
エラーメッセージは?
41デフォルトの名無しさん:2006/06/14(水) 09:25:08
>>37-39
ありがとうございます☆
確かにそれなら、簡単にできそうです!!
感謝です☆
4235:2006/06/14(水) 09:48:39
>>40
error C2065: 'T' : 定義されていない識別子です。]

と出ます。

どのように直せば良いのでしょうか?
43デフォルトの名無しさん:2006/06/14(水) 10:26:07
>>42
エラーメッセージ貼るなら、どの行か判るようにしてくれ。

で、恐らくmain()で配列Tが宣言されていないのでエラーになっていると思われる。
関数の呼び方も間違っている。訂正するならこんな感じか。
>SetBoundaryCondition(T[NY][NX]);

>double T[NY][NX];
>SetBoundaryCondition(T);
4435:2006/06/14(水) 11:11:07
>>43
ありがとうございます。無事ビルドできました。
しかし今度はデバッグで

'熱伝導.exe': 'C:\Documents and Settings\服部 正太郎\My Documents\Visual Studio 2005\Projects\熱伝導\debug\熱伝導.exe' を
読み込みました。バイナリはデバッグ情報と一緒にビルドされませんでした。
'熱伝導.exe': 'C:\WINNT\system32\NTDLL.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。
'熱伝導.exe': 'C:\WINNT\system32\KERNEL32.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。
プログラム '[2216] 熱伝導.exe: ネイティブ' はコード 0 (0x0) で終了しました。

と出ました。何故でしょうか?
Visual C++ 2005 Express Editionを使っているのですが。
45デフォルトの名無しさん:2006/06/14(水) 11:22:10
>>44
オマイ、名前、名前!!
4635:2006/06/14(水) 11:30:37
さすがに本名じゃないんで、無問題です。
47デフォルトの名無しさん:2006/06/14(水) 11:35:29
本名だろw
48デフォルトの名無しさん:2006/06/14(水) 12:06:46
服部 正太郎って今時あるのか?w

本名に1票!!
49デフォルトの名無しさん:2006/06/14(水) 12:47:49
マキ凛花
50デフォルトの名無しさん:2006/06/14(水) 13:52:29
>>44
デバッグ用んp設定とリリース用の設定が混じってる希ガス
環境設定間違ってね?
もっかい新規作成からやってみれば?
ソースはコピペすればいいんだし
5135:2006/06/14(水) 15:29:23
新規作成してみましたが、解決しませんでした。
52デフォルトの名無しさん:2006/06/14(水) 15:34:15
>>51
よく嫁!
そして無視しろ
以上
53デフォルトの名無しさん:2006/06/14(水) 15:54:16
ダイアログを表示させて、キー入力があったらそれに応じて
処理をおこなうようにしたいのですが、キー入力してもエラー音が出て
WM_CHAR:の処理をおこなってくれません。
あまり関係なさそうなところを省くと、ソースは下のようになってます。

int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,LPSTR lpsCmdLine, int nCmdShow)
{
DialogBox(hCurInst, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC)DlgProc);
return 0;
}
LRESULT CALLBACK DlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
switch (msg) {
case WM_INITDIALOG:〜
case WM_CHAR:〜
case WM_COMMAND:〜
}

ダイアログだけで済むものを考えているので、WindowProcはありません。
なにか分かることがありましたら、お願いします。
54デフォルトの名無しさん:2006/06/14(水) 16:12:08
>>53
入力フォーカスって関係ある?
5533:2006/06/14(水) 16:25:42
何。俺だけ?この現象
56デフォルトの名無しさん:2006/06/14(水) 16:37:30
>>54
ありがとうございます。

キーを押されたらそれに応じて、スタティックテキストを書き換えるように
してたので、エディット欄は設けていませんでした。
エディット欄を設けると、当然そこには入力できるのですが、やはりWM_CHAR:
に記述した処理はおこなってくれません。

キーが押されると、WM_CHARのメッセージが渡されるという理解で
間違ってないでしょうか?
57デフォルトの名無しさん:2006/06/14(水) 16:49:56
>>56
WM_KEYDOWN あたりを見ると幸せに・・・なれたらいいなぁ

>>55
すまん。テンプレートは苦手じゃ
5835:2006/06/14(水) 17:58:50
>>52
了解、無視します。
ありがとうございました。
59デフォルトの名無しさん:2006/06/14(水) 22:52:23
前スレで質問したのですが回答得られなかったので教えてください

CPU情報を表示するソフトを作りたいのですが
CrusoeのCPUが判定できる 外部DLLってありますか?
[作りたいもの]
c:\>cpuinfo
と打つと
Crusoe 933MHz
と表示される
60デフォルトの名無しさん:2006/06/14(水) 23:24:07
バージョン:VC++6.0
OS:win2k or winXP
VC++でブレークポイントを設定すると固まることがまれにあります。
解決方法をご存知の方がいらっしゃいましたらご教示願います。
スレッドを作成しています。
61デフォルトの名無しさん:2006/06/14(水) 23:35:25
それ経験したし、原因も何かで読んだな。
DirectInput だかなんだかの問題じゃなかったっけ・・・

http://www.microsoft.com/japan/msdn/directx/techart/nodelaydirectinput.asp
62デフォルトの名無しさん:2006/06/14(水) 23:38:21
63デフォルトの名無しさん:2006/06/15(木) 01:11:37
>>61さん
情報どうもありがとうございます
ただ、DirectInput は使用していません
MFC使用、SDI,スレッドにmessageループ(PostThreadMessage->GetMessage)を使用しています
スレッドにブレークポイントを設定したときに固まる傾向にあります。

>>62
Windows XP Service Pack 1 以上も当てています(たぶんService Pack 2)し、
Win2kでもおきます。
プログラムが糞だから起きるのでしょうか?たぶんそうです
64デフォルトの名無しさん:2006/06/15(木) 01:13:57
スレッドの同期待ちになってるとか
65デフォルトの名無しさん:2006/06/15(木) 03:41:15
PGPLOTというグラフ作成ツールを導入したいのですが、うまくいきません。
「libc.libファイルが開けません」というエラーが出たのでググってみたのですが
『libc.libはVS2005では削除されて、代わりにマルチスレッド用libcmt.libがある』
とのこと。

これはどうやって解決したらよいのでしょうか。
よろしくお願いします。
66デフォルトの名無しさん:2006/06/15(木) 05:46:03
>>65
プロジェクトの設定を見直す。
67デフォルトの名無しさん:2006/06/15(木) 07:26:11
マルチし始めたな。
68デフォルトの名無しさん:2006/06/15(木) 21:19:06
さっき始めたばかりの超素人です。

/*****************
* hello *
* world *
*****************/

#include <stdio.h>

int main()
{printf("Hello World!");
return 0;}


っていう入門書に書いてあったやつをそのまま作ったんですが、実行すると一瞬だけ表示されてすぐに消えてしまいます。
たぶん写し間違えとかはないと思うんですが・・・
なにとぞご教授ください。
69デフォルトの名無しさん:2006/06/15(木) 21:30:56
>>68
それでおそらく合ってます
出来たexeファイルをコマンドプロンプトから実行してみてください
70デフォルトの名無しさん:2006/06/15(木) 23:22:30
#include <stdio.h>

int main()
{printf("Hello World!");
while(1); //←この行を追加しましょう
return 0;}
71デフォルトの名無しさん:2006/06/15(木) 23:50:20
>>70
こらこら。いたずらは程ほどに。
72デフォルトの名無しさん:2006/06/16(金) 00:33:04
>>71
は〜い
実行すると一瞬だけ表示されてすぐに消えるのは、
windowsの標準設定にてプログラムが終了したら窓を閉じる
という設定になっているためです。
解決方法は2種類
1.プログラムがすぐに終了しないような処理を書く
 ⇒70の無限ループや、キー入力待ちの処理を入れる方法
2.窓を勝手に閉じなくする
 ⇒69や、プロパティでプログラム終了したら窓を閉じるという
  チェックボックスを外す方法

があります。以上
73デフォルトの名無しさん :2006/06/16(金) 09:52:58
>>68
コンソールアプリは、処理が終わると同時に
コンソールウィンドウも閉じる
ただ、コメントの内容は
ちゃんとこのプログラムは・・・をするプログラム
ってかんじで書いたほうがよいです。
でも、ちゃんとコメントを書くってのは良いことです。
74デフォルトの名無しさん:2006/06/16(金) 12:08:58
教えてエロい人
CStringで入力した数値をint型に変換するにはatoi関数を使うとわかったのですが、
CString型をdoubleまたはfloat型に変換するには何を使ったらよいんでしょうか?
調べても見つかりませんorz
お願いします。
75デフォルトの名無しさん:2006/06/16(金) 12:23:50
atof
76デフォルトの名無しさん:2006/06/16(金) 13:28:35
おおおおお!
できた。dクス。
77デフォルトの名無しさん:2006/06/17(土) 15:57:42
VC++ 6.0 でWindows SDKでデスクトップの一部をキャプチャするものを作っているのですが、
実行したウインドウをなんども移動させたりすると、メモリーリーク??を起こしているのか
途中から画面が真っ白になってしまいます。何が悪いのでしょうか。

LRESULT CALLBACK WndProc(HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
static HWND hWndDesktop;//デスクトップのHWND
static HDC hDCDesktop;//デスクトップのHDC

switch(message)
{
case WM_CREATE:
hWndDesktop = GetDesktopWindow();
return 0;
case WM_PAINT:
hDCDesktop = GetDC(hWndDesktop);
BitBlt(GetDC(hWnd), 0, 0, 100, 100, hDCDesktop, 0, 0, SRCCOPY);
ReleaseDC(hWndDesktop,hDCDesktop);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
}
78デフォルトの名無しさん:2006/06/17(土) 16:03:53
>>77
WM_PAINTではGetDC(hWnd)ではなくBeginPaintを使え。
BeginPaintを呼ぶことでWindowsはそのウィンドウへ描画されていると認識する。
勿論EndPaintを忘れないように。

あと、デスクトップのウィンドウハンドルからGetDCしなくても、単にGetDC(0)で良いはず。
7977:2006/06/17(土) 16:17:26
>>78
返答ありがとうごいます。早速試してみます。
8077:2006/06/17(土) 16:33:40
>>77のプログラムを以下の様に変更してみました。
画面が真っ白になるのは解消されました。
そこで質問なのですが、hDCDesktop;(画面全体のHDC)は
開放しなくていいのでしょうか?

HDC hDCDesktop;//デスクトップのHDC
HDC hDC;//コピー先のHDC
PAINTSTRUCT ps;//BeginPaintのために宣言(使用しない?)

switch(message)
{
case WM_PAINT:
hDCDesktop = GetDC(0);
hDC = BeginPaint(hWnd, &ps);
BitBlt(hDC, 0, 0, 100, 100, hDCDesktop, 0, 0, SRCCOPY);
EndPaint(hWnd, &ps);
return 0;
8177:2006/06/17(土) 16:42:21
再度書きなおしました。
なぜか再描画がされないときもありますが、だいぶちゃんと動くようになりました。
こんな感じでいいのかなあ・・・。ありがとうございました。

static HWND hWndDesktop;//デスクトップのHWND
HDC hDCDesktop;//デスクトップのHDC
HDC hDC;//コピー先のHDC
PAINTSTRUCT psDesktop, ps;//BeginPaintのために宣言(使用しない?)

switch(message)
{
case WM_CREATE:
hWndDesktop=GetDesktopWindow();
case WM_PAINT:
hDCDesktop = BeginPaint(hWndDesktop, &psDesktop);
hDC = BeginPaint(hWnd, &ps);
BitBlt(hDC, 0, 0, 100, 100, hDCDesktop, 0, 0, SRCCOPY);
EndPaint(hWnd, &ps);
EndPaint(hWndDesktop, &psDesktop);
return 0;
82デフォルトの名無しさん:2006/06/17(土) 18:33:39
キーボードからn個のデータを配列に読み込みn個の平均値を求めるプログラムを
double sum(double x[],int n)
double average(double x[],int n)
を使って作成したいのですが全く分かりません。
どなたか作成して頂けないでしょうか。
クレクレ君ですみません
83デフォルトの名無しさん:2006/06/17(土) 20:51:34
>>81
BeginPaintが使えるのはWM_PAINTが来た時
かつそのWM_PAINTを受け取ったウィンドウに対してのみ。

だからデスクトップに対してはGetDC(0)しろ。
GetDCには常にReleaseDCが必要と思え。
84デフォルトの名無しさん:2006/06/17(土) 20:53:26
>>82
宿題なら宿題スレへ。
8577:2006/06/18(日) 00:58:06
>>83
ありがとうございます。言っている意味が理解できました。
86デフォルトの名無しさん:2006/06/18(日) 09:52:38
>>84
失礼しました。
87デフォルトの名無しさん:2006/06/18(日) 15:03:05
ソースを二つ入れてビルドしたら死ぬほどエラーが出てコンパイルできません。
詳細を見たらcstdioやcstlibで構文エラーが出てます。
どうしたらコンパイルできますぁ。
88デフォルトの名無しさん:2006/06/18(日) 15:32:02
>>87
自分のソースを見直した上で、リビルド。それでもダメなら新規プロジェクトでやり直してみるとか。
8987:2006/06/18(日) 16:50:55
>>88
visualc++を再起動したら直りました。
ありがとうございました。
90デフォルトの名無しさん:2006/06/19(月) 16:12:58
何かキーを押すとデスクトップ上の任意の座標(200,200)の色を表示するプログラムなんですが、
実行するとデスクトップの色に関わらずRGB(255,255,255)と表示されます。
いったん、デスクトップのコンパチブルDCを作成してそこにBitBltし、
そのコンパチブルDCの座標をGetPixelというちょっと面倒な事をしています。何が原因なんでしょうか。

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
static HDC hDCDesktop;
HDC hDCTemp;
TCHAR s[80];
COLORREF clr;
int ix = 200, iy = 200;//任意の座標(200,200)

switch(message){
case WM_KEYDOWN:
hDCDesktop = GetDC(0); //デスクトップのDC
hDCTemp = CreateCompatibleDC(hDCDesktop); //デスクトップのコンパチブルDC
BitBlt(hDCTemp, 0, 0, 500, 500, hDCDesktop, 0, 0, SRCCOPY);
clr = GetPixel(hDCTemp, ix, iy);
ReleaseDC(0, hDCTemp);
ReleaseDC(0, hDCDesktop);
wsprintf(s, "COLOR: R [%d] G[%d] B[%d]",
GetRValue(clr), GetGValue(clr), GetBValue(clr));
MessageBox(hWnd, s, "CHECK", MB_OK);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
}
91デフォルトの名無しさん:2006/06/19(月) 16:42:14
>>90
CreateCompatibleDCでDCを作ると、描画対象のビットマップはシステムで共有される
1x1ピクセルのものが設定されています。CreateCompatibleBitmap で bitmap を作って
SelectObject で設定してあげないといけない。

それから CreateCompatibleDC で作った DC は DeleteDC で開放する。このとき、
事前に最初に設定されていたビットマップをSelectObjectで設定しなおすこと。

hdc = CreateCompatibleDC()
hbitmap = CreateCompatibleBitmap()
tmp = SelectObject(hdc, hbitmap)
作ったDCを使用
SelectObject(hdc, tmp); // 元に戻す
DeleteDC(hdc)
DeleteObject(hbitmap)
9290:2006/06/19(月) 16:50:25
>>91
有難う御座います。
CreateCompatibleDCを全然理解していませんでした。
早速試してみます。
9390:2006/06/19(月) 18:07:12
正しく(たぶん?)動くようになりました。有難う御座いました。

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
HDC hDC,hDCDesktop;
HBITMAP hBitmap, hBitmapOld;
TCHAR s[80];
COLORREF clr;
const int ix = 200, iy = 200;//任意の座標(200,200)

switch(message){
case WM_KEYDOWN:
hDCDesktop = GetDC(0);
hDC = CreateCompatibleDC(hDCDesktop);
hBitmap = CreateCompatibleBitmap(hDCDesktop, 500, 500);
hBitmapOld = (HBITMAP)SelectObject(hDC, hBitmap);
BitBlt(hDC, 0, 0, 500, 500, hDCDesktop, 0, 0, SRCCOPY);
clr = GetPixel(hDC, ix, iy);
SelectObject(hDC, hBitmapOld);
DeleteObject(hBitmap);
DeleteDC(hDC);
ReleaseDC(0, hDCDesktop);
wsprintf(s, "COLOR: R [%d] G[%d] B[%d]",
GetRValue(clr), GetGValue(clr), GetBValue(clr));
MessageBox(hWnd, s, "CHECK", MB_OK);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
}
94デフォルトの名無しさん:2006/06/20(火) 13:31:54
質問です
自分の作ったアプリを他人のPCに持って行って動かした時に落ちてしまいます
その時に
アドレス0x12345678から無効なアドレス0x0000000Cを参照した
というようなダイアログが出ます。
このアドレスをメモしておいて、自宅に帰った後、どの関数で落ちているのか調べたいのですが
そのようなことはどうやったらできるでしょうか
どうかご教示願います
VC2005です
95デフォルトの名無しさん:2006/06/20(火) 14:11:26
>>94
やり方さえ知ってれば、というかあるツールさえあれば、簡単にそのアドレスから
ソースコードの行番号に変換することができます。(それを使う前準備が必要
なんですが)
『.NET & Windows プログラマのためのデバッグテクニック徹底解説』という書籍に
詳しい解析方法が載っています。
そのツールとはCrashFinderという名前のもので、ググればどこかにころがって
いるかもしれません。
96デフォルトの名無しさん:2006/06/20(火) 14:31:37
>>95
ありがとうございます
その本を読んでみます
97デフォルトの名無しさん:2006/06/20(火) 22:09:36
>>95
値段を見てみたら1万円なんですね…
立ち読みしようと思って大きな本屋に行きましたが見つからなかったです…orz
9895:2006/06/20(火) 23:59:17
秋葉原に行けば確実なんですけどね・・・

では、ググるためのキーワードをいくつか。

・クラッシュアドレス
・MAP
・pdb

英語でも検索してみてください。

どこかに懇切丁寧にやり方を解説しているページがあるかもしれません。
99デフォルトの名無しさん:2006/06/21(水) 00:09:18
Visual Studio Spoke をつかっています。ToolBarを使いたいのですが

リソースファイルの追加ダイアログでToolBarだけ存在しません。

バージョンによって違うのですか?
100デフォルトの名無しさん:2006/06/21(水) 01:14:55
あのー

自作クラスからMFCが作成したクラスにメッセージを投げる方法を教えて頂けないでしょうか?

コンソールアプリで動く自作クラスでマルチメディアタイマーをつけてみました。
このクラスをMFCに組み込んで、タイマーが呼び出すコールバック関数から
MFCが作成したクラスにメッセージを(SendMessage又はPostMessageで)投げたいのですが、
うまくゆきません。

・・・効率悪いとか言われそうですが、脳が足りない私に知恵を分けて頂けませんか?
宜しくお願いします。
101デフォルトの名無しさん:2006/06/21(水) 11:08:00
>>100
いや、普通に投げられるよ
ウィンドウハンドルが間違ってるか、メッセージがフィルタリングされてるか、どっちかじゃない?
投げてるメッセージはWM_APP以降だよな?
102デフォルトの名無しさん:2006/06/22(木) 02:35:53
>>100

返答ありがとうございます。

ぅ〜ん。WM_APP以降かどうかもわからないレベルです、すいません。

やっていることは
@MFCで作成したCxxxViewにWM_TIMERをうけとるOnTimerを実装した。
A自作クラスCHogeにSetCWnd( void* HWND )という、void*型でメインウィンドウのアドレスを取得する関数を実装。
BMFC内で生成したCHogeのインスタンスにメインウィンドウのAfxGetMainWnd()で取得したアドレスを格納。
CCHogeのコールバック関数から
  ret = SendMessage( (HWND)cmusic->GetWnd(), WM_TIMER, 0, 0 )
を実行

ちなみにretの値は「届いてませんよ」の0が入ってます。

・・・という感じです。
おろかですが、アドバイスお願いします。
103デフォルトの名無しさん:2006/06/22(木) 02:57:30
>>101

100です
すいません 
自分に礼をいってますた


104デフォルトの名無しさん:2006/06/22(木) 04:52:18
>>102
なんだかなぁ。
やりたいことをちゃんと説明して、「こういうときはどうすればいいんでしょう」と聞いた方が早い希ガス。
105デフォルトの名無しさん:2006/06/22(木) 10:14:31
JavaのStateパターンを移植してみようと思い、以下のように書いてみました。
VC2005でコンパイルしたところ

error C2512: 'A' : クラス、構造体、共用体に既定のコンストラクタがありません。

というエラーが出たのですが、どうしてエラーになるのでしょうか?
AやBにコンストラクタを追加しても解決せず、class Cの宣言をAより下に持っていくとエラーがなくなりました。
class A;
class B;
class C
{
B* b;
public:
C() : b(new A){}
};

class B
{
public
~B(){}
}

class C
{
public:
~C(){}
}
106デフォルトの名無しさん:2006/06/22(木) 10:15:53
class C
{
public:
~C(){}
}

はclass Aの間違いです。
107デフォルトの名無しさん:2006/06/22(木) 12:54:54
>>105
クラスの定義の終わりにはセミコロン付けろ
108デフォルトの名無しさん:2006/06/22(木) 13:23:17
>>107
ああ、ごめんなさい。もちろんつけております
109デフォルトの名無しさん:2006/06/22(木) 13:39:16
>>105
いわゆる「前方参照」は、ポインタの場合にしか使えない。
class Cのコンストラクタのnew Aの前に、前方参照宣言ではなくclass Aの実際の宣言が必要。
110デフォルトの名無しさん:2006/06/22(木) 13:56:11
クラスBはこの場合関係ないと思う。問題は
class A;
という宣言だけではクラスAのコンストラクタがクラスAのメモリのどこにあるか、クラスCには分からないことじゃないかな
class A{
public:
    A(); // 仕様だけでいい
};
まで書かないとだめなはず
というかこれはclass Cの宣言をAより下に持っていくって事なんだけど

一番手っ取り早い解決は
仕様のA();を.h、実装のA(){}を.cppに書いて計(A,B,Cの3クラス×2で)6つのファイルに分けて書くこと

それが嫌で仕様と実装でファイルを分割しない場合で循環参照をしたい場合は
純粋仮想関数や継承といったテクニカルなことをしないとC++では出来なかったと思う
111デフォルトの名無しさん:2006/06/22(木) 14:12:09
テクニカルなことってのはこんな感じ

class AGhost{
public:
virtual bool foo() = 0;
};

class B{
AGhost *p;
public:
B(){
p = new AGhost;
}

void goo(){
p->foo();
}
};

class A : public AGhost{
public:
bool foo(){
printf("helloworld");
}
};

あ、間違ってたり普通にもっと良い方法があったらすいません
指摘していただけると嬉しいです
112デフォルトの名無しさん:2006/06/22(木) 15:53:53
>>110-111
>>109が全てだから
113デフォルトの名無しさん:2006/06/23(金) 21:13:28
え?前方参照は戻り値の型や値渡しの場合でも有効じゃなかったっけ?
114デフォルトの名無しさん:2006/06/23(金) 22:53:57
コンソール用プログラムが十分書ける様になってから、ウインドウズのソフトが作れる様になるまでってどれくらい時間掛るものなのでしょうか?
115デフォルトの名無しさん:2006/06/23(金) 23:04:48
>>113
それはそうだけど、今回の例だとnewがあるから無理。
newは前方宣言だけではできないはず。
116デフォルトの名無しさん:2006/06/25(日) 17:39:09
VisualC++6 で今まで打ち込んできたソースが増えてきたので
一旦CDにでも焼いてからHDDから消そうかと考えているのですが
意外と分量があるので容量を幾らかダイエットさせようと思っています

debug フォルダの中なら消しても問題ないような気がするので
delete *.obj みたいな感じのバッチファイルを書こうかと思ってるのですが
拡張子が .idb .ilk .obj .pch .pdb あたりのファイルは消しちゃっても大丈夫なんでしょうか?
いや多分大丈夫だと思うのですが、例外的なケースがあって困ることはないかと不安で・・・
117デフォルトの名無しさん:2006/06/25(日) 17:44:10
>>116
クリーン時に削除する拡張子ってのがプロジェクトごとに設定されてるから
それ見て消せばいいと思うよ。あとはncbとか。
118デフォルトの名無しさん:2006/06/25(日) 17:44:20
>>116
例外的なケースをどこまで想定するかにも拠る。
まぁ、外部から*.objを持ち込むとか、バイナリパッチするとか、そういうことをしてなければ大丈夫だ。
119デフォルトの名無しさん:2006/06/25(日) 17:49:50
>>117-118
レスありがとうございます。

私が思っていたほど単純な話ではなかったようですが
注意しながら消していくことにします
120デフォルトの名無しさん:2006/06/25(日) 17:51:03
いや、単純な話です。Exploreの検索機能で見つかったファイルを
まとめてばっさりやってOKです。
121デフォルトの名無しさん:2006/06/25(日) 21:05:20
ピタゴラスの定理
122デフォルトの名無しさん:2006/06/25(日) 22:13:47
debug フォルダごと消しちゃって大丈夫
123デフォルトの名無しさん:2006/06/26(月) 00:02:36
>>116
昔どっかでみつけた VCClean.exe というのを自分は使っている。
蛇足だが、フォルダ毎 lzh 圧縮して MO に保存。
640MB MO が一杯になると CD-ROM ヘ。
124デフォルトの名無しさん:2006/06/27(火) 21:46:50
すいません、質問させてください。
オープンソースアプリをVC++6.0でコンパイルしようとしているのですが、
sys/param.hやsys/socket.h、そのほか大勢が無いと弾かれてしまいます。
調べてみた所、それらのヘッダはunixには存在するらしいのですが、
windowsには標準では入っていない様です。

こういう場合は、unixからヘッダファイルだけ抜き出して
VC++のincludeフォルダ内に入れたりして解決するのでしょうか?
もしもっと賢い解決法があれば教えていただけると有難いです。
125デフォルトの名無しさん:2006/06/27(火) 21:53:14
そのソースを公開してるサイトで直接質問する。
126デフォルトの名無しさん:2006/06/27(火) 21:59:54
Cygwinでも使ってろカス
127デフォルトの名無しさん:2006/06/27(火) 22:10:22
そもそもWindows用のアプリじゃないんだろ
128デフォルトの名無しさん:2006/06/27(火) 22:11:58
>>124
そのオープンソースの名称を具体的に教えてくれ
129デフォルトの名無しさん:2006/06/27(火) 22:16:40
皆さんどうもありがとうございます。

>>125
それもそうなんですが……
メールアドレスだけしか書かれていないので気後れしてしまいまして。

>>126
今cygwinをインストールしています。
unixをインストールしなくても良いのは便利そうですね。

>>127
一応、Windows対応版のソースを拾ってきたんですけどね……

>>128
stoneです。googleでトップに出てきます。
130デフォルトの名無しさん:2006/06/27(火) 22:24:22
ダウソしてビルドしてみようかと思ったら、0.4KB/sなどというありえない
速度だったので断念w
131デフォルトの名無しさん:2006/06/27(火) 22:25:03
ちゃんとメーリングリストがあるじゃないか
132デフォルトの名無しさん:2006/06/27(火) 22:26:46
ぶっちゃけソースの頭見ればVC++は考慮してないのわかるよね?
133デフォルトの名無しさん:2006/06/27(火) 22:29:22
>>132
すいません……サッパリです。
超初心者以下なようでご迷惑おかけします…
134デフォルトの名無しさん:2006/06/27(火) 22:31:12
>>132
clという名前のコンパイラはVC++以外にあるのかい?
135デフォルトの名無しさん:2006/06/27(火) 23:33:04
ICL
136デフォルトの名無しさん:2006/06/27(火) 23:44:36
intelのclだなww
137デフォルトの名無しさん:2006/06/28(水) 08:14:19
exeに付属のdllのヘッダと必要ならLibを用意する。
あとはmakeするだけ
馬鹿でもできる。
138デフォルトの名無しさん:2006/06/28(水) 10:16:49
それよりもっと賢い方法は無いのかって聞いてるんじゃないの?>>124で。
139デフォルトの名無しさん:2006/06/28(水) 10:31:27
だから馬鹿でもVCでコンパイルできるようになってる。
140デフォルトの名無しさん:2006/06/28(水) 10:52:08
>>124
unix専用のヘッダはVCは参照しないようになってるが。
141デフォルトの名無しさん:2006/06/28(水) 21:25:38
最近VC始めたんですが、intからStringへの型変換で躓いています。

int i=123;
String str = String.Format( {0} , i );

一応ぐぐったりしてこんなコードを書いたんですが、コンパイルするとエラーが出ます・・・
メッセージ通りに手を加えても通りません。
きっと初歩的なことなんでしょうけど何処が悪いんでしょうか?
142デフォルトの名無しさん:2006/06/28(水) 22:04:10
長年VCやってるけどStringなんて知らんな
それ本当にVCか?
143デフォルトの名無しさん:2006/06/28(水) 22:12:18
.NEETの話だろ?
ってか、"{0}"じゃね?
144デフォルトの名無しさん:2006/06/28(水) 22:43:32
String ^ str = String::Format("{0}", i );
これで通った
謎だ・・・

>>141の{0}はタイプミスですが、今まで必死になって{"0"}を通そうとしていました。
どう見ても通りません。
本当にありがとうございました。
ところで ^ って何なんでしょうか・・・
MSDNに聞いてもでてこないし・・・
145デフォルトの名無しさん:2006/06/28(水) 23:08:08
色々ダメですな
146デフォルトの名無しさん:2006/06/28(水) 23:09:12
>>144
C++/CLIのトラッキングハンドルを意味する。
ようするに.NETのポインタのようなものだと思えば良い。

あと、String::Formatを使わなくても、単にi.ToString()で良いと思うのは気のせいか?
147デフォルトの名無しさん:2006/06/29(木) 09:57:59
ぐは、int型は内部でInt32なんだね。
"" + i とかしてたよ。orz
148デフォルトの名無しさん:2006/06/29(木) 11:42:55
vectorは、先頭要素のアドレスとcapacity/resize
149デフォルトの名無しさん:2006/06/29(木) 11:44:14
vectorは、先頭要素のアドレスとcapacity/resize/reserveを使うことによりバッファとして使用できますが
dequeでソレをすることはできないのでしょうか?

capacityとreserveすら使えないのですが、FIFOバッファのコンテナとして使いたいので
vectorではちょっとパフォーマンスが不安なんです
150デフォルトの名無しさん:2006/06/29(木) 17:15:57
a.reset(new A);



a = std::auto_ptr<A>(new A);

と等価ですよね

a = new A;

とは書けないんですか?

できないのならコンパイルエラーが出るべきだと思ってたんだけどランタイムエラーになってしまいました。

たぶん、このコードいっぱいあるのでsxzd;jzhp
151デフォルトの名無しさん:2006/06/29(木) 21:36:17
すいません質問なんですが、
>>149
>>150
の言っている意味を教えてください
152デフォルトの名無しさん:2006/06/29(木) 22:10:48
あ、オレもそれ知りたい
153デフォルトの名無しさん:2006/06/29(木) 22:17:39
誤爆だろ
154デフォルトの名無しさん:2006/06/30(金) 20:34:23
初めてプログラムを作ろうと思って行き詰ってしまったので質問させて下さい。

double x ;
char str ;

x = 1.11 ;
sprintf(str, %f, x) ;

SetWindowText(hwnd, str) ;

これで表示される値が0.000になってしまうのです。
%fを%ld等に変えるとしっかり整数部分だけはでるのですが・・
どうしてだか教えてください(´・ω・`)
155デフォルトの名無しさん:2006/06/30(金) 20:37:21
>>154
strはchar配列にしないとだめだろ。
156デフォルトの名無しさん:2006/06/30(金) 20:43:48
>>155
あ、書き間違えていました
char str[30]
という配列を宣言していました
157デフォルトの名無しさん:2006/06/30(金) 22:17:26
VC6.0とVC7.1で確認したけど 1.110000と表示された
sprintf(str,"%f",x)にはしたが。
文字セットはマルチバイトセットで確認した。
158デフォルトの名無しさん:2006/06/30(金) 23:12:14
doubleの所がlongになっていたようです
doubleにしたらできました
本当に申し訳ございませんでしたorz
159デフォルトの名無しさん:2006/07/01(土) 21:56:27
非コンソールプロジェクトからコンソールに出力ってできますか?
デバッグに使えたら便利…というか、今現在使いたいと思っています。
ご存知の方いらっしゃいましたらよろしくお願いいたします。
160デフォルトの名無しさん:2006/07/01(土) 22:09:50
WinXpでこんなソフトを考えてますが、可能でしょうか?

LPT1を監視して、他のアプリケーションが印刷ジョブを流したら、
そのデータを読み取りたいです。印刷は行います。
161デフォルトの名無しさん:2006/07/01(土) 22:13:40
>>159
AllocConsoleしてWriteFile
162デフォルトの名無しさん:2006/07/01(土) 22:54:53
別にLPT1:を監視しないでも、仮想プリンタポートつくって、
そこから横流しすればいいじゃん。
163デフォルトの名無しさん:2006/07/01(土) 22:56:12
>>161
おお、表示できました。ありがとうございます。
こいつぁ便利だ〜(`・ω・´)
164デフォルトの名無しさん:2006/07/02(日) 00:29:47
http://www.interq.or.jp/black/minami-m/
ここのdirectXのサンプルプログラムをvisual c++ 2005でビルドしてみたのですがコンパイルまではできたのですが、リンクの段階で

dx_audio.obj : error LNK2019: 未解決の外部シンボル __imp__CoCreateInstance@20 が関数 "int __cdecl AdoInit(void)" (?AdoInit@@YAHXZ) で参照されました。
dx_audio.obj : error LNK2019: 未解決の外部シンボル __imp__CoInitialize@4 が関数 "int __cdecl AdoInit(void)" (?AdoInit@@YAHXZ) で参照されました。
dx_audio.obj : error LNK2019: 未解決の外部シンボル __imp__CoUninitialize@0 が関数 "void __cdecl AdoRelease(void)" (?AdoRelease@@YAXXZ) で参照されました。
win_main.obj : error LNK2019: 未解決の外部シンボル __imp__ShowCursor@4 が関数 _WinMain@16 で参照されました。
win_main.obj : error LNK2019: 未解決の外部シンボル __imp__FindWindowA@8 が関数 _WinMain@16 で参照されました。

というようなエラーが大量にでてきました。解決方法わかりますでしょうか。
スレ違いでしたらごめんなさい。
165デフォルトの名無しさん:2006/07/02(日) 03:58:15
すみません、ここで訊く事じゃないかもしれませんが、
Visual C++ 2005 Express Edition にて、Windowsフォームアプリケーションを作成しようとすると、
以下のダイアログが出て先(? Delphiみたいなフォームが出る?)に進めません。

---------------------------
Visual C++ 2005 Express Edition
---------------------------
f:\Documents and Settings\username\デスクトップ\test2\test2\Form1.h
ファイルを開けません。
---------------------------
OK
---------------------------

これは普通の動作なのでしょうか??
エラーのタブには↓のようなメッセージが表示されます。

警告1保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。0
166デフォルトの名無しさん:2006/07/02(日) 08:37:48
>>164
OLE32.LIBとUSER32.LIBをリンクするようにしろ。
167デフォルトの名無しさん:2006/07/02(日) 13:25:03
>>166
なるほど。Platform SDKのその2つのライブラリを自分でリンクする必要があったんですね。
おかげでだいぶエラーが減りました。質問ばかりで申し訳ないのですが

win_main.obj : error LNK2019: 未解決の外部シンボル __imp__GetStockObject@4 が関数 "int __cdecl SysCreateWindow(struct HINSTANCE__ *,int)" (?SysCreateWindow@@YAHPAUHINSTANCE__@@H@Z) で参照されました。
d3dx8dt.lib(d3dx8core.obj) : error LNK2019: 未解決の外部シンボル __imp__GetObjectA@12 が関数 _D3DXCreateFont@12 で参照されました。
d3dx8dt.lib(d3dx8dbg.obj) : error LNK2019: 未解決の外部シンボル __imp__RegCloseKey@4 が関数 "int __stdcall D3DXDebugAssert(char const *,int,char const *)" (?D3DXDebugAssert@@YGHPBDH0@Z) で参照されました。

といったエラーがまだ残っています。
あとは同じようなエラーなのでこれさえ解決できれば実行できるような気がするのですが・・。
よろしくお願いします。
168デフォルトの名無しさん:2006/07/02(日) 13:31:24
gdi32.lib
advapi32.lib

MSDNで関数名を検索して必要なライブラリを割り出せ。
169デフォルトの名無しさん:2006/07/02(日) 13:33:32
>>162
なるほどです。
参考になるサイトとかご存知ですか?
なかなか見つからないす。
170デフォルトの名無しさん:2006/07/02(日) 14:02:59
なるほどなるほど
171デフォルトの名無しさん:2006/07/02(日) 15:19:05
>>168
なるほど、そういう方法があったんですね。
実行することができました。ありがとうございました。
172デフォルトの名無しさん:2006/07/02(日) 15:55:53
Visual Studio2005を使ってWindowsのC++プログラム勉強中の初心者なので
すが、ウインドウの右端にある「サーバーエクスプローラ」や「プロパティ」が表示
されている垂直のタブ(名前わからなくてスミマセン)を、どこかに移動する(また
は消す)ということはできないでしょうか。
画面が狭いので、自動的に隠れる状態にして使ってるんですが、スクロール
バーを動かそうとしてちょっとずれると出てきちゃうのです。

もし、環境はスレ違いでしたらごめんなさい。その際は誘導していただけると
助かります。
173171:2006/07/02(日) 16:11:18
教えていただいたようにgdi32.lib user32.lib advapi32.lib ole32.libの4つのライブラリをリンクすると
プログラムを実行することができたのですが、
プロパティ→構成プロパティ→リンカ→入力
のところに実行するたびに入力しなおさないと消えてしまいます。
これって毎回入力するしかないのでしょうか。
174デフォルトの名無しさん:2006/07/02(日) 16:15:41
175デフォルトの名無しさん:2006/07/02(日) 16:30:43
未来からこにゃにゃちわ。
176デフォルトの名無しさん:2006/07/02(日) 21:51:09
VC++2500すごそうだな…
一体どれだけの進化を果たしているんだろう。
177デフォルトの名無しさん:2006/07/02(日) 22:18:08
>>176
安心汁。確実に退化してるだろうから。
178デフォルトの名無しさん:2006/07/03(月) 02:09:33
こんにちは。

最近までC++Builderを使っていたのですが、Visual C++ 2005 Expressに
乗り換えることに決意し、試行錯誤しています。

自作ソフトにファイルのダンプをする機能を入れたいのですが、C++Builderでいう
コンポーネント(ファイルダンプまたはバイナリエディター)はないでしょうか。

ご存じのかた、よろしくお願いします。
179デフォルトの名無しさん:2006/07/03(月) 03:40:49
>>174
一応やったつもりだったのですがやり足らなかったところがあったようです。
おかげさまで毎回リンクする必要がなくなりました。
ありがとうございます。
180デフォルトの名無しさん:2006/07/03(月) 07:40:21
リンクする必要がなくなったんではなくて、明示する必要がなくなっただけだろ。
181デフォルトの名無しさん:2006/07/03(月) 16:09:33
すみません。初めてですが質問をさせていただきます。

映像(AVI)を読み込んで、その画像列などを表示するプログラムを作っています。
画像での表示はできているのですが、IEなど別のウィンドウに切り替えたとたんに、今まで表示されていた画像が消えてしまいます。
アクティブな部分(例えば映像再生中のピクチャ)は表示されるのですが、そうでない部分は表示が消えたままになります。

どのようなプログラム(命令?)を追加すれば解決できるのでしょうか?

環境はVisual C++ 6.0です。
よろしくお願いします。
182デフォルトの名無しさん:2006/07/03(月) 16:41:47
動画の隠れた部分は更新されない。
隠れた部分が表にでたら更新が必要
やりかたは普通のウインドウの更新と同じ
183デフォルトの名無しさん:2006/07/03(月) 17:00:05
更新が必要だったのですね。

解決しました。
ありがとうございました。
184デフォルトの名無しさん:2006/07/03(月) 23:08:31
VC6で、簡単にライブラリプロジェクトに追加されているヘッダファイルの格納ディレクトリを変更する方法があったら教えてください。
エクスプローラでファイルを移動しただけだとリンクエラーになる

移動したいヘッダファイルをプロジェクトから一旦削除して、
移動した後のファイルをプロジェクトに追加するしかないん?


185デフォルトの名無しさん:2006/07/05(水) 18:55:16
プロジェクト(P)>設定でプロジェクトの設定ダイアログを開き、
C++のタブでカテゴリのダイアログボックスからプリプロセッサを選択。
インクルードファイルのパス(N)にパスを書けばOK。
(相対でも絶対でも可)

追加ライブラリ本体のパスは同じくプロジェクトの設定ダイアログの
リンクのタブでカテゴリのダイアログボックスからインプットを選択。
追加ライブラリのパス(D)にパスを書く。
186デフォルトの名無しさん:2006/07/08(土) 19:03:48
VC++.NETで開発している初心者です。
フォームを作成してForm1.hというファイルができあがり、そのファイル中にコードを記述しているのですが、
ネットや、この掲示板、参考書を見るかぎり、やってること(書いてる場所)が全く違う気がして疑問に思っているのですが、
VC++.NETで開発する際、実際にコードを打つファイルはForm1.hではなく、別の.cppファイルを作成して
それをForm1.h側から参照するようにするのが普通なのでしょうか?
187デフォルトの名無しさん:2006/07/08(土) 19:31:29
>>186
それもう秋田
188デフォルトの名無しさん:2006/07/08(土) 21:22:24
マニュアルやMSDN読んでない奴ばっかりだな
189デフォルトの名無しさん:2006/07/09(日) 00:48:47
.NETでStartTimerボタンをクリックするとタイマーを作って一秒ごとにNowの値を増やそうとしているんですが、

error C3867: 'Project::Form1::OnTimedEvent': 関数呼び出しには引数リストがありません。メンバへのポインタを作成するために '&Project::Form1::OnTimedEvent' を使用してください

'System::Timers::ElapsedEventHandler' : delegate コンストラクタには 2 つの引数が必要です

この二つのエラーがでます。
MSDNのサンプルを真似たはずなんですけど何処が悪いんでしょうか?

private: System::Void StartTimer_Click(System::Object^ sender, System::EventArgs^ e) {
System::Timers::Timer^ aTimer = gcnew System::Timers::Timer;
aTimer->Elapsed += gcnew ElapsedEventHandler(this->OnTimedEvent);

aTimer->Interval = 1000;
aTimer->AutoReset = true;
aTimer->Enabled = true;

}

private:
void OnTimedEvent(Object^ source, ElapsedEventArgs^ e )
{
Now += 1;

throw(gcnew System::NotImplementedException);
}
190デフォルトの名無しさん:2006/07/09(日) 20:28:23
WinHttpを使ってテキストファイルをGETするところまで組んだんですが
このファイルがShift-JISなんでUnicodeに変換しないと行けません。
どうやってやればよいのですか?
191デフォルトの名無しさん:2006/07/09(日) 20:32:35
Shift-JIS Unicode 変換でググるとあら不思議
192190:2006/07/09(日) 20:50:38
orz
今、自分で書き込んだキーワード入れたら出てきたんだな・・・
30分以上ぐぐったのに・・・
193デフォルトの名無しさん:2006/07/09(日) 21:41:12
申し訳ないんですけどどなたか>>189お願します。
194デフォルトの名無しさん:2006/07/09(日) 21:46:09
汚くて見る気しないよ
195デフォルトの名無しさん:2006/07/09(日) 22:11:15
>>189まとめてみました。
error C3867: 'Project::Form1::OnTimedEvent': 関数呼び出しには引数リストがありません。メンバへのポインタを作成するために '&Project::Form1::OnTimedEvent' を使用してください

'System::Timers::ElapsedEventHandler' : delegate コンストラクタには 2 つの引数が必要です

この二つのエラーが

System::Timers::Timer^ aTimer = gcnew System::Timers::Timer;
aTimer->Elapsed += gcnew ElapsedEventHandler(this->OnTimedEvent);  ←ここ

この部分で発生します。どう直せばいいのでしょうか?
196デフォルトの名無しさん:2006/07/09(日) 23:09:32
C++/CLIは知らんからパス。
つーか、何故初心者がC++/CLIに?
197デフォルトの名無しさん:2006/07/09(日) 23:50:18
>>195
gcnew ElapsedEventHandler(this, &ほげ::OnTimedEvent)だと思う。
ほげにはthisのクラス名を当てはめろ。
198デフォルトの名無しさん:2006/07/10(月) 00:56:43
久々にVisual C++に戻ってきたんだけど、
ソースとヘッダにコード書くのめんどい。
プリコンパイルヘッダもあるし、全部ヘッダに書いても、
そんなコンパイル重くならない気がするんだけど、どうなのかな。
199デフォルトの名無しさん:2006/07/10(月) 05:22:41
ほとんどヘッダに書いてしまってるのは見たことあるけど
ヘッダのみは見たことないな
ソースがないとコンパイルできないだろ
200デフォルトの名無しさん:2006/07/10(月) 15:47:07
VisualC++と普通のC++の違いって何ですか?
201デフォルトの名無しさん:2006/07/10(月) 15:58:43
>>200
Visual C++はMicrosoftが作ったC++処理系とIDEその他の製品名。
202デフォルトの名無しさん:2006/07/10(月) 18:47:00
標準C++との相違点を聞いているのかもしれないぞ
203デフォルトの名無しさん:2006/07/10(月) 18:56:29
>>200
C++にはWin32APIとかMFCとかいう単語は出てこない(使いコトはできる)
204デフォルトの名無しさん:2006/07/10(月) 19:09:42
標準C++で書いたソースなら、ほぼコンパイル通るよ
205デフォルトの名無しさん:2006/07/10(月) 19:11:32
「ほぼ」ってところがいやらしいよね。
206デフォルトの名無しさん:2006/07/10(月) 19:21:51
Windows環境ではVCが標準と思っておけば間違いない。
標準C++のみじゃほとんど何の役にも立たない。
207デフォルトの名無しさん:2006/07/10(月) 19:26:06
>>206
あんたにとって、「役に立つ」とはGUIの派手なアプリ限定なのか?
例えば数値シミュレーションやパズルの解析、ファイル処理などは想像もつかないのかな?
208デフォルトの名無しさん:2006/07/10(月) 19:32:03
>>207
お前は道具は使い分けることも知らない馬鹿ですか
209デフォルトの名無しさん:2006/07/10(月) 19:35:51
数値シミュレーションやるならCPUの能力を使うことを考えないとな
210デフォルトの名無しさん:2006/07/11(火) 10:39:06
Visual C++ 2005ってコードスニペット機能がついていませんよね。
アドインか何かで似たような機能を実現してくれるものってないでしょうか。
211デフォルトの名無しさん:2006/07/11(火) 18:51:14
すみません、Windows上でソケット通信を使ってデータをやりとりする、
Cで書かれた簡単なクライアントとサーバのプログラム例ってどこかにないでしょうか?
Javaでいうとここぐらいの感じで。
http://www.hellohiro.com/socket.htm
よろしくお願いいたします。
212デフォルトの名無しさん:2006/07/11(火) 18:59:02
>>211
      , イ)ィ -─ ──- 、ミヽ
      ノ /,.-‐'"´ `ヾj ii /  Λ
    ,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{
   ノ/,/ミ三ニヲ´        ゙、ノi!
  {V /ミ三二,イ ,  /,   ,\  Yソ
  レ'/三二彡イ  .:ィこラ   ;:こラ  j{
  V;;;::. ;ヲヾ!V    ー '′ i ー ' ソ
   Vニミ( 入 、      r  j  ,′
   ヾミ、`ゝ  ` ー--‐'ゞニ<‐-イ
     ヽ ヽ     -''ニニ‐  /
        |  `、     ⌒  ,/
       |    >┻━┻'r‐'´
      ヽ_         |
         ヽ _ _ 」    

  ググレカス [ Gugurecus ]
  ( 2006 〜 没年不明 )
213211:2006/07/11(火) 18:59:41
補足です。
コンソールプログラムで十分です。(むしろその方がいい)
214211:2006/07/11(火) 19:14:50
補足です。
コンソールプログラムで十分です。(というよりそのほうがいい)
215211:2006/07/11(火) 19:16:48
補足です。
自己解決しました。
216デフォルトの名無しさん:2006/07/11(火) 21:55:54
家のVCでは中括弧}を書くとそれに対応した中括弧{が太字になってくれるのですが、
学校のVC6では太くなってくれません。
どこかで設定すればいいのでしょうか?それともこのバージョンでは不可能なのでしょうか?
217デフォルトの名無しさん:2006/07/11(火) 22:05:20
不可能
218デフォルトの名無しさん:2006/07/13(木) 13:08:57
そうですか・・・ありがとうございました
219デフォルトの名無しさん:2006/07/15(土) 00:55:59
ビルドしてできたアプリケーションに、
自作のアイコンを使いたいのですが、設定の仕方が分かりません。
ソリューションに、既存の項目追加で、アイコンを追加するところまではできたのですが、
そのアイコンをどうやってアプリケーションのアイコンにするのかが分かりません。

使用しているのは、VisualC++.net standard 2003 です。
よろしくお願いします。
220デフォルトの名無しさん:2006/07/15(土) 05:41:03
元のアイコンを置き換えるんじゃだめなのか?
221219:2006/07/15(土) 09:04:58
>>220

KH IconRewrite98というツールで書き換えようと思ったら、
exeファイルが、「対応していない形式です」というエラーが出て書き換えできませんでした。

が、いろいろいじくっているうちになんとか自作のアイコンを使う事ができました。
既存の項目追加ではなく、リソースとして追加する事で解決しました。
222デフォルトの名無しさん:2006/07/15(土) 11:47:21
>>219
リソースエディタで.rcファイルを書き換えないとだめなんじゃないかな。
俺はVC++2005 Express Editionだからリソースエディタないけど、
中身は普通のテキストファイルだから、覗けば一目瞭然だと思うよ。
223デフォルトの名無しさん:2006/07/15(土) 11:59:31
プロジェクトの中のアイコンファイルを置き換えてビルドするだけだろ
224デフォルトの名無しさん:2006/07/15(土) 15:18:29
VAIO MXの前面コントローラのイベントを取得したい・・・なんて悩みはどこで聞けば分かりますかね。

Googleじゃ|ι´Д`|っ < もうだめぽ
225219:2006/07/16(日) 17:42:56
すみません、つづけて質問させてください。

作成したアプリケーションを実行した時、
タイトルバーの左端にある小さいアイコンを、
自作のアイコンに変更したいのですが、どうすればいいでしょうか?

とりあえず16*16の小さいアイコンを用意し、リソースに組み込んだのですが、
タイトルバーの小さいアイコンに設定する方法がわかりません。

>>223
プロジェクトの中に元々アイコンのリソースが入っておらず、
今までは、ウインドウズ標準の実行ファイルのアイコン(白い四角いアイコンです)が表示されていました。
現在タイトルバーのアイコンも、この標準のアイコンが表示されています。

226デフォルトの名無しさん:2006/07/16(日) 19:09:57
ウィザードで作ればアイコンも入るよ。
ウィザード使ってないんだと、どんなプログラムか想像つかないから答えようがない。
227224:2006/07/18(火) 01:50:51
自己解決しました。

コントローラを管理してるサービスプログラム(MxLCDLib.exe)が
C#の参照で読み込めました。
4年半前買ったパソコンなのに・・・.NET思考の恩恵かな?

ありあとーございました
228デフォルトの名無しさん:2006/07/18(火) 22:21:23
VCって例外のfinallyブロック使えないの?(´・ω・`)
定義されてないとかエラーになるんですけど。
229デフォルトの名無しさん:2006/07/18(火) 22:31:48
C++のEHにfinallyなんてないしSEHは__finallyだカス
230デフォルトの名無しさん:2006/07/19(水) 00:27:42
おおう、finallyなかったんだな・・・
__try, __finally使ったら、
warning C4509: 非標準の拡張機能が使用されています :
'Hoge::Test2' は SEH と デストラクタ を含む 'str1' 使われています。
error C2712: オブジェクト アンワインディングが必要な関数内で __try を使用できません。
とか言われるし・・・
231デフォルトの名無しさん:2006/07/19(水) 00:45:23
>>230
エラーメッセージのとおり。

1つの関数内でC++ EHとSEHは共存できない。(できてもおかしくは無いとは思うけど)
ここで言うC++ EHには自動変数のデストラクタも含まれる。

その割には/EHa使うと構造化例外が起きたときに
自動変数のデストラクタが呼ばれるのはなんか変な感じだが。

やっぱりC++ではデストラクタを使うのが一番だよ。
232デフォルトの名無しさん:2006/07/19(水) 19:41:26
あるプロジェクトの出力 a.lib と、
別のプロジェクトの出力 b.lib に含まれるオブジェクトを
全部まとめて c.lib にすることは出来ますか?
コンパイルオプションは全く同一にそろえています。
233デフォルトの名無しさん:2006/07/19(水) 19:59:06
他のプロジェクトの出力を参照しつつ、
void stub(void){} みたいなダミーのコードとリンクしたら
全部一体になった lib 吐けました。
234デフォルトの名無しさん:2006/07/19(水) 22:46:36
質問の意味がわからないかもしれないけど、

EOF <<
文字列
>>

↑こんなんありましたよね?たしかPHPじゃあったはず。
コレなんて言うんすか?
235デフォルトの名無しさん:2006/07/19(水) 22:50:51
ヒアドキュメント
236234:2006/07/19(水) 22:55:10
>>235
あぁ!それ!ありがとうございます!
237234:2006/07/19(水) 23:00:48
あ、でもC++にヒアドキュメントないみたいっすね。
大量の文章を扱う時に楽な方法ってありますか?
238デフォルトの名無しさん:2006/07/19(水) 23:07:53
リソース
239デフォルトの名無しさん:2006/07/19(水) 23:09:23
String Table
240デフォルトの名無しさん:2006/07/20(木) 15:26:23
VC++6.0を使っているものです、質問させてください。

ttp://www.vector.co.jp/soft/win95/prog/se251850.html
上のアドレスから落とせる、
amediousというプログラムをVC++で動かしたいのですが、
amediousに付いてくるhtmの説明を見てもよく分かりませんでした。

プロジェクトにソースファイルを追加するところまでは出来たのですが
追加してビルドすると、

LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です
Debug/unit00.exe : fatal error LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー

というエラーが出てしまいます。

さらに、その先の「2、準備」からの説明も良く分からなくて・・・。
当方超ド初心者のため、
初心者にも分かりやすく使い方を教えてくださると嬉しいです。

どうか、よろしくお願いします。
241デフォルトの名無しさん:2006/07/20(木) 19:18:37
ライブラリだからそれだけじゃ何の意味もないよ
242デフォルトの名無しさん:2006/07/20(木) 21:11:17
拡張子ぬいてファイル名だけを取り出したり
ディレクトリをぬいてファイル名だけを取り出したりするような
便利ユーティリティの詰まったライブラリってないのかな。
243デフォルトの名無しさん:2006/07/20(木) 21:27:42
            ,、‐ ''"  ̄ ``'' ‐- 、
        /イハ/レ:::/V\∧ド\
       /::^'´::::::::::::i、::::::::::::::::::::::::::::\
     ‐'7::::::::::::::::::::::::ハ:ハ::|ヽ:::;、::::::::::::丶
     /::::::::::::::/!i::/|/  ! ヾ リハ:|;!、:::::::l
    /´7::::::::::〃|!/_,,、   ''"゛_^`''`‐ly:::ト
      /|;ィ:::::N,、‐'゛_,,.\   ´''""'ヽ  !;K
        ! |ハト〈  ,r''"゛  ,       リイ)|   
          `y't     ヽ'         //
         ! ぃ、     、;:==ヲ   〃     作ればいいと思うよ。
         `'' へ、   ` ‐ '゜   .イ
              `i;、     / l  
                〉 ` ‐ ´   l`ヽ
            / !        レ' ヽ_
         _,、‐7   i|      i´   l `' ‐ 、_
     ,、-‐''"´  ノ,、-、 / 、,_ ,.、- {,ヘ   '、_    `ヽ、_
   / i    ,、イ ∨ l.j__,,、..-‐::-:;」,ハ、 '、` ‐、_   ,`ヽ
  /  l ,、‐'´ // ',/!:::::::::;、--ァ' /  `` ‐   `'7゛   ',
 /   l  i  ´  く   ';::::::l  / /         /     ',
/     ! l      \ ';:::l , '  /        i/     ',   
244デフォルトの名無しさん:2006/07/20(木) 21:30:23
VC使いこなせてないやつが多いな
245デフォルトの名無しさん:2006/07/20(木) 21:44:38
なぜ boost とかつかわないのかわからん。
246デフォルトの名無しさん:2006/07/20(木) 21:47:23
 o-o、
 ('A`) メガネメガネ
 ノ ノ)_

247デフォルトの名無しさん:2006/07/20(木) 21:54:52
なぜそこで boost がでてくるのかわからん。
248デフォルトの名無しさん:2006/07/20(木) 22:25:50
>>247 boost::filesystem とかでパスいじれるから。
249デフォルトの名無しさん:2006/07/20(木) 22:30:14
アホ?
特に理由がない限りWindowsネイティブなものを直接使うだろ
250242:2006/07/20(木) 22:36:23
>>248
あ、boostにそんなのあったんだ。
boost::pathとかまさに.NETのPathクラスみたいな機能あるね。
ちなみにATL/WTLでActiveXのプログラム書いてるんだけど、
文字列ってCStringかstd::wstringどっちを汎用的に使う方が良いかなぁ。
251デフォルトの名無しさん:2006/07/20(木) 22:39:39
つ shlwapi
252デフォルトの名無しさん:2006/07/20(木) 23:10:56
>>249
242の要求は251の言うとおりshlwapiで満たされるだろうが、
shlwapiはIE4以上が必要。これはshlwapiを使わない・使いたくない理由としては十分だと思う。
253デフォルトの名無しさん:2006/07/20(木) 23:19:28
そもそもVC使う必要ないのでは?
254デフォルトの名無しさん:2006/07/20(木) 23:24:54
そもそもVCスレで質問した意味がないのでは?
255デフォルトの名無しさん:2006/07/20(木) 23:27:40
ActiveXにIEは必要ないの?
256デフォルトの名無しさん:2006/07/21(金) 02:21:48
 HPを読み込んで内容を検索しようと思ったのですが、InternetOpen、InternetOpenUrl、InternetReadFileの順序でコードを書いたのですが、InternetReadFileを何回呼び出しても、最初の部分しか取得できない状態です。
 どのサンプルをみてもInternetReadFileを数回読み込むだけで全部取得できているのですが、どこが悪いのかわかりません。
 
257デフォルトの名無しさん:2006/07/21(金) 09:45:07
どこも悪くない、trueが返るか読み込みサイズが0になるまで繰り返し呼ぶべし。
258デフォルトの名無しさん:2006/07/23(日) 14:01:56
質問です。XP、.NET 2005 です。

デバッグのステップ実行時、ステップインで、特定のファイルには入らないという指定はできないでしょうか?
例えば、Func(_T("hoge"), _T("hogehoge")): という処理があったとして、
Func に入るためには、二度も _T() に入る必要があり、手間がかかります。

よろしくお願いします。
259デフォルトの名無しさん:2006/07/23(日) 14:23:30
Win32apiの中には入れないからやろうと思えばできるね
260デフォルトの名無しさん:2006/07/23(日) 14:28:24
SJISファイルを1行づつ読んでUnicode変換してwstringに入れようとしています。
楽なのはfopen&fgetsで1行づつ読むたびに、
MultiByteToWideChar()
で変換かなと思ってます。
ただ、ファイル名もwstringで受け取るようになっているので
fopenへ渡すときにどうすべきか悩んでます。
wstringをSJISに変換して渡さないといけないのでしょうか?
その場合、日本語ファイル名や空白の入ったファイル名もちゃんと読めるのか不安です。
261デフォルトの名無しさん:2006/07/23(日) 15:00:58
>>260
Visual C++には_wfopenという関数がある。
また、fgetwsを使えば直にwchar_tのワイド文字列として読み込める。
(読み込むときにマルチバイト文字列からワイド文字列へ変換される)

がしかし、wstringに入れるんだったら、std::wifstreamとstd::getlineで決まりだろ。

wifstreamのコンストラクタとopenにもVC++独自にワイド文字列を引数のとるものが多重定義されている。
それが嫌なら自分でワイド文字列を受け取るストリームバッファ・ストリームクラスを作れば無問題。
但し激しく面倒という諸刃の剣。素人にはお勧めできない。

C/C++でワイド文字を扱うときにはlocaleの設定をお忘れなく。
262260:2006/07/23(日) 23:10:00
どうもです、さっそくためしたんですがgetlineで日本語化けます。

setlocale(LC_ALL, "Japanese_Japan.20932");
stream.open(path.c_str());
stream.getline(buffer, 1024);

とかやってるんですが、日本語は化けますね・・・
263260:2006/07/23(日) 23:14:44
あ、setlocale("japanese")の間違いです。
264デフォルトの名無しさん:2006/07/24(月) 00:49:03
C の locale いじってどうすんだよカス
265デフォルトの名無しさん:2006/07/24(月) 01:25:00
>>262
C++のはC++のlocaleを設定する必要がある。
<locale>をインクルードして、std::locale::global(std::locale(""));
localeの文字列を空にするとデフォルトの設定になる。
ようするにWindowsの言語とか使用者が設定した言語とかになるので、
特に必要がなければ空にするのが個人的なお勧め。

ついでに言うとstd::locale::globalを呼ぶと、内部でstd::setlocaleも呼ばれる。
266260:2006/07/24(月) 07:07:58
それもやったけど駄目でしたね。
ちなみにifstreamでも引数にwchat_tのpathを受け取るオーバーロードがありました

なんでifstreamでgetlineして、MultiByteToWideCharするようにしました。
267デフォルトの名無しさん:2006/07/24(月) 09:27:40
>>262
待て、なんでstream.getlineなんだ。
メンバ関数でないほうのgetlineはstringを引数に取るぞ。
268デフォルトの名無しさん:2006/07/24(月) 11:05:53
自己解決したみたいだからほっといてやれよ
269240:2006/07/25(火) 16:53:36
そうですか、わかりました。
微妙にスレ違いでした、ごめんなさい。
ありがとうございました、失礼します。
270デフォルトの名無しさん:2006/07/25(火) 17:46:14
本当にくだらないことで恐縮なんですが……
VC++6.0で、メンバの自動表示が上手く機能しません。
ほとんどは何も表示されず、たまーに運が良いと表示される程度です。

プロジェクトの設定からブラウザ情報の生成にもチェックを
入れてみましたが、相変わらずです……。
どなたか解決策をご存知でしょうか?
271デフォルトの名無しさん:2006/07/25(火) 21:41:31
いい加減6.0は捨てる
272デフォルトの名無しさん:2006/07/25(火) 22:02:31
捨てる必要はないけど、いまだに6.0初心者がいるのが不思議
273デフォルトの名無しさん:2006/07/25(火) 22:10:40
2005EEが無料なのが伝わってないのか
会社がVC6.0しか使わせてくれないのか
274デフォルトの名無しさん:2006/07/25(火) 22:21:06
2005は糞重いから必要もないのに乗り換えるのは馬鹿
今から始めるなら2005だろうけど
275デフォルトの名無しさん:2006/07/26(水) 00:47:48
270です。

未だに6.0なのは、C++とWin32APIの勉強がしたいからでして……
.NET以降はManagedになったり/CLIになったりでよく分からないですし
重いそうなので敬遠していました。

やっぱり2005EEに移った方が良いでしょうか?
276デフォルトの名無しさん:2006/07/26(水) 01:00:43
2005EEでもただのC++プログラミングとただのWin32 APIプログラミングは問題なくできる。
277デフォルトの名無しさん:2006/07/26(水) 18:46:21
VC6のprintfでLFのみ出力するにはどうしたらいいですか?
\nだとCR+LFになってしまいます。
278デフォルトの名無しさん:2006/07/26(水) 18:48:48
\v じゃなかった貝?
279デフォルトの名無しさん:2006/07/26(水) 19:02:04
printf("LF");
280デフォルトの名無しさん:2006/07/26(水) 19:10:02
マジレスすると、バイナリモードでオープンしなおせば宜しい。
281277:2006/07/26(水) 22:21:10
\vはダメでした。
バイナリモードで再オープン以外で無いでしょうか?
%cを使わずに
printf("\0x0a");
みたいな書式できたらいいんですが、、、
(これではダメでした)
282デフォルトの名無しさん:2006/07/26(水) 22:22:55
printf("%c",0x0a)
283デフォルトの名無しさん:2006/07/26(水) 22:51:43
>>282
釣り乙。

>>281
printf()のレベルではなく、その先のレベルで'\r'が補われるのだからそれがputchar()になってもやっぱり無理。
284デフォルトの名無しさん:2006/07/27(木) 00:22:50
おまいら・・・
285デフォルトの名無しさん:2006/07/27(木) 05:57:20
Visual Studio 6.0ですがインターネットやってるときの、エラーがひとつでもあろうものなら「デバッグしますか?」がうざくてしょうがないです。
どうすればこれを無効化出来ますか?
286デフォルトの名無しさん:2006/07/27(木) 08:32:02
>>285
インターネットオプションの詳細設定のブラウズの
スクリプトエラーごとに通知を表示するをオフにし、
スクリプトのデバッグを使用しないをオンにする。

たぶんこれででなくなると思う。
287デフォルトの名無しさん:2006/07/27(木) 15:04:28
RichEditの文字色の変え方を教えてください・・・
背景色はSetBackgroundColorで変わるんですが。
288デフォルトの名無しさん:2006/07/27(木) 15:27:05
>>210氏の質問に答えられる人います?
私も知りたい。

 210 名前:デフォルトの名無しさん[] 投稿日:2006/07/11(火) 10:39:06
 Visual C++ 2005ってコードスニペット機能がついていませんよね。
 アドインか何かで似たような機能を実現してくれるものってないでしょうか。
289デフォルトの名無しさん:2006/07/27(木) 19:27:39
#include <clx.h>
#include <iostream>
#include <cstdlib>
#include <memory>
#include <vector>

#pragma hdrstop

//指定したパスに存在するファイル名/ディレクトリ名をすべて出力する。

#pragma argsused
using namespace std;
int main(int argc, char* argv[])
{
if(argc!=3){
cerr<<"USAGE AllDirFileNames.exe TargetName mode(f|d|ft|dt)"<<endl;
//system("PAUSE");
return -1;
}

//argv[1]で指定されたパス以下のファイル名のリストを作成
TSearchRec sr;
std::auto_ptr<TStringList> sl(new TStringList());
AnsiString dot(".");
AnsiString dotdot("..");


つづく
290デフォルトの名無しさん:2006/07/27(木) 19:28:56

//モードの判定
bool file,directory,target;
file=directory=target=false;
if(!strcmp(argv[2],"f")) { file=true;}
else if(!strcmp(argv[2],"d")) { directory=true;}
else if(!strcmp(argv[2],"ft")) { file=target=true;}
else if(!strcmp(argv[2],"dt")) { directory=target=true;}

//対象ファイルを取得
vector<AnsiString> targetNames;
char buf[256];
if(!target){
targetNames.push_back(AnsiString(argv[1]));
}
else{
FILE* fp=fopen(argv[1],"r");
if(fp==NULL){
cerr<<"Can't open file "<<argv[1]<<endl;
return -1;
}
while(fscanf(fp,"%s",buf)!=EOF){
targetNames.push_back(AnsiString(buf));
}
}


つづく
291デフォルトの名無しさん:2006/07/27(木) 19:32:33
for(size_t i=0;i<targetNames.size();++i){
if(file){ //fileを探す
if(!FindFirst(targetNames[i]+"/*",faAnyFile,sr)){
do{
if(sr.Attr!= faDirectory&& sr.Name!=dot && sr.Name!=dotdot)
sl->Add(sr.Name);
} while (FindNext(sr) == 0);
FindClose(sr);
}
}
else if(directory){ //directoryを探す
if(!FindFirst(targetNames[i]+"/*",faDirectory,sr)){
do{
if(sr.Attr==faDirectory)
if(sr.Name!=dot && sr.Name!=dotdot)
sl->Add(sr.Name);
} while (FindNext(sr) == 0);
FindClose(sr);
}
}

つづく
292デフォルトの名無しさん:2006/07/27(木) 19:34:22
//リストの各要素は絶対パスに変換して出力する
if(sl->Count==0){
cerr<<"not found"<<endl;
continue;
}

for(int j=0;j<sl->Count;j++){
cout<<targetNames[i].c_str()<<"/"<<sl->Strings[j].c_str()<<endl;
}
sl->Clear();
}

//system("PAUSE");
return 0;
}

ボーランドで組んだんですけどVCに移植するいい方法ありませんか?
293デフォルトの名無しさん:2006/07/27(木) 19:39:58
いきなりなんのつもりだ?
294デフォルトの名無しさん:2006/07/27(木) 19:51:51
clx.h が非互換っぽいが他はだいたいいけそうな気がするな。
295デフォルトの名無しさん:2006/07/27(木) 20:11:47
>>286さん
みごと直りました。THX SOOOOO MUCH!
296デフォルトの名無しさん:2006/07/27(木) 23:12:48
>>294
そうなんです、clx.hでエラー出るんです
自分で探してみたんですけど無くて・・・
互換性のあるヘッダーファイルってありますか?
297デフォルトの名無しさん:2006/07/27(木) 23:20:53
死ね
298デフォルトの名無しさん:2006/07/28(金) 00:04:15
AnsiStirngはstd::stringにして、検索にはWindows API使えばいいだろ。
299デフォルトの名無しさん:2006/07/28(金) 00:27:51
あれ?
clxってborlandじゃなかったっけ?
300デフォルトの名無しさん:2006/07/28(金) 00:31:13
…って、最後まで読んだらちゃんとボーランドで組んだって書いてあるなorz
ごめんね。
お母さん三行しか読めないから、ごめんね。
301デフォルトの名無しさん:2006/07/28(金) 00:49:49
TSearchRecも互換性無いと思うんですけどVCに似たような関数ありませんか?
質問ばっかりですいません
302デフォルトの名無しさん:2006/07/28(金) 07:47:03
>>301
Windows APIのFindFirstFile 〜 FindNextFile 〜 FindCloseでいいと思うが。
303デフォルトの名無しさん:2006/07/28(金) 16:13:16
VC++6でダイアログベースのアプリを作っています.

ダイアログにCStaticとCListBoxを配置して,CStaticのキャプションをファイル名(&F)の用に設定してALT+Fのアクセラレータを定義しています.
それで,ALT+Fをした時にCListBoxにフォーカスが移るようにしたいのですが,やり方を教えて頂けないでしょうか?

調べた事
・PreTranslateMessageでWM_KEYDOWNでメッセージを捕まえる方法
・リソースにアクセラレータを追加してOnInitDialogでLoadAccelerators読みこみ,PreTranslateMessageでTranslateAcceleratorを処理
・RegisterHotKey()でALT+Fを定義
CStaticの通知にチェック有り無しにしても駄目でした

参考アプリ
ttp://www.vector.co.jp/authors/VA000007/
これのRegDiffの ALT+1,ALT+2,ALT+3の様なイメージです.

宜しくお願いします.
304デフォルトの名無しさん:2006/07/28(金) 16:35:45
setfocusじゃだめなんだろうか?
305303:2006/07/28(金) 16:40:00
>>304

ALT+Fを捕まえてSetFocusする方法というか手順が判らないのです.
ALT+FがCStaticに食べられてしまい親のCDialogに処理が来ない感じなのです.
306デフォルトの名無しさん:2006/07/28(金) 18:14:03
.net2005 c++を使っていますが、
NPlotのようなグラフ描画のdllがあったら教えてください。
但し、MS-OFFICEが必要なものは除きます。
307デフォルトの名無しさん:2006/07/28(金) 18:19:16
NPlotではいけない理由を述べよ。
308デフォルトの名無しさん:2006/07/28(金) 18:25:43
C#ではうまく動作したのですが、c++ではエラーで正常に動きませんでした。
もし、c++でのNPlotの使用例などを紹介しているサイトがあればご紹介
いただけないでしょうか?
309デフォルトの名無しさん:2006/07/28(金) 18:29:16
.NETじゃないってオチなんだろうなぁ。
310デフォルトの名無しさん:2006/07/28(金) 21:05:23
簡易電卓(windowsアクセサリについてるような形式で四則演算、
符号付演算、浮動少数演算のみ行う形式)VC++でサンプルソース
を探してます!どなたかお勧めのサイト教えていただけないで
しょうか?ちなみに開発環境はVisual Stdio6.0です。
311デフォルトの名無しさん:2006/07/28(金) 21:09:34
>>303
ダイアログに処理を食われたくない場合は、WM_GETDLGCODE の動作を乗っ取る・・・だったと思う。

ところで Alt + ??? は、WM_KEYDOWN じゃなくて WM_SYSKEYDOWN じゃなかったっけか
312デフォルトの名無しさん:2006/07/28(金) 21:11:30
>>310
もうちょっと知りたいことを絞って。
ダイアログの作り方が知りたいのか、演算解析アルゴリズムが知りたいのか、など。
313310:2006/07/28(金) 21:24:47
>>312
ダイアログベースで作りEditbox、ボタン配置はできました。またEditboxに
、ボタンを押すと対応した数字が1桁だけ表示されるところまではいけたの
ですが、そのあと続けて複数桁表示する方法、数値入力処理、演算処理の
アルゴリズムを教えていただきたいです。
314デフォルトの名無しさん:2006/07/28(金) 22:53:19
最初から全部説明しないと作れないレベルならあきらめた方がいいと思う。
315デフォルトの名無しさん:2006/07/29(土) 00:25:08
質問です。↓のカプセル化方法を用いて継承した自作コントロールのクラスを作る方法はありますでしょうか。
私が考えるにCreateWindowだと作れそうだが、リソースのダイアログ内でCONTROL指定した
場合は無理っぽいですがどうでしょうか?えろい人、どうぞ教えてくださいませ。

http://techtips.belution.com/ja/vc/0009/
316デフォルトの名無しさん:2006/07/29(土) 00:47:09
>>313
普通に10キー入力をEditBoxに反映させるくらい簡単だから自力で頑張れ。
それができたらEditBoxをもう二個用意し、演算キーが押されたら片方に
演算子を、もう片方にもとのEditBoxのコピーを格納する。
ここまで準備ができたら=キーで演算してそれぞれのEditBoxにセットするだけだ。
#勿論、完成の暁には後からの二つのEditBoxを非表示すればいい。
317310:2006/07/29(土) 10:57:20
>>316
がんばってみます、ありがとうございました。
318デフォルトの名無しさん:2006/07/29(土) 11:30:49 BE:138072593-2BP(105)
エディットボックスを16進固定の数値入力欄にして、
それをスピンボタンで16進で数値を変更できるようにしたいのですが、可能ですか?
319デフォルトの名無しさん:2006/07/29(土) 14:06:11
wav等の音を鳴らす際に、音量を調整したいのですが
何か方法を教えて頂けると助かります。

あと効果音を複数鳴らしたいのですが、簡単に実現できる方法はありますか?
320仕様書無しさん:2006/07/29(土) 14:39:25
>318
可能です
321デフォルトの名無しさん:2006/07/29(土) 15:27:30
>>320
きてぃちゃん登場でつか? プ
322デフォルトの名無しさん:2006/07/29(土) 15:37:02
可能だねぇ。標準の連動機能だけでは無理だけど。
323デフォルトの名無しさん:2006/07/29(土) 17:30:40
つうかその程度の事できなくてどうするよ
324デフォルトの名無しさん:2006/07/30(日) 20:58:06
ある文字列"abcde"があったとして、それをエディットボックスに
表示するときに一番後ろの文字(この場合e)だけ削除して表示する
方法教えてくれませんか?
325デフォルトの名無しさん:2006/07/30(日) 21:03:11
>>324
char * str = "abcde";
size_t len = strlen(str);
char * p = new char[len - 1 + 1];
sprintf(p, "%.*s", len - 1, str);
// エディットボックスにpをセット
delete[] p;
326324:2006/07/30(日) 21:17:30
>>325
回答ありがとうございます。ちなみにCString型の"abcde"の場合の
方法もありますか?表示方法もSetWindowTextでしたいのですが。
327デフォルトの名無しさん:2006/07/30(日) 21:21:17
>326
少しは自分で考えてみたら?文字列操作なんてもんは基本はどんな言語でも
同じなんだから。
328324:2006/07/30(日) 21:31:39
すみませんググりまくったのですがわからなかったので;
329デフォルトの名無しさん:2006/07/30(日) 21:35:47
>328
ググるのはいいんだが、求めるものとまったく同じでなければわからないって
話でもあるまい?全ては応用問題だ。
とりあえず>325をCStringに書き直してみればいい。それで足りない要素がある
のならそこだけを考えればいい。

あと、質問に答えたら即座に違う質問をするってのは、質問に答えてくれた
>325に失礼なんだってこと。少しは間を置いたり、別の質問として分けるなどの
気遣いが欲しい。
330324:2006/07/30(日) 21:43:44
すみませんマナーがなってませんでした。自力でがんばってみます。
331デフォルトの名無しさん:2006/07/30(日) 22:54:45 BE:126608933-2BP(0)
complex.hをインクルードして、複素数を扱いたいと思っています。
complex<double> x と書けば、実数部と虚数部がそれぞれdouble型として定義されますよね?
その後、それぞれに任意の値を代入するために、どのようにして各部にアクセスすれば
良いのでしょうか?
x.real、x.imagというようにしてもコンパイルエラーがでました。
↓エラーの内容
「メンバー関数は呼び出すかそのアドレスをとらなければならない」
332デフォルトの名無しさん:2006/07/30(日) 23:08:25
メンバー関数知らんの?
333325:2006/07/30(日) 23:08:35
>>331
complexのrealは参照を返す関数かconst参照を返すconst関数。
従って、値をセットするには前者を使ってx.real() = 3; x.imag() = 4;などとすればいい。
個別に値を取り出したい場合は後者を使ってprintf("%g, %g\n", x.real(), x.imag());だな。

>>329
>>325に失礼なんだってこと。
ま、別に気にしないけどね。
334331:2006/07/30(日) 23:16:30
>>333
ありがとうございます。
しかし、その書き方をしてみたところ、コンパイルで
「左辺値が必要」と言われてしまいました。
何がまずいんでしょうか?
335デフォルトの名無しさん:2006/07/31(月) 08:02:04
俺も>>2と同じ状況になった。
何やっても解決しないんだけど何これ、MSのバグか?
336デフォルトの名無しさん:2006/07/31(月) 08:26:10
再インストールしてもだめなんだろうか?
337デフォルトの名無しさん:2006/07/31(月) 08:28:13
>>335
お前が理解できてないだけ。
338デフォルトの名無しさん:2006/07/31(月) 08:31:06
>>337
もったいぶらずに教えてくれよ。
ソースファイルの一つだけが急にブレークポイント指定できなくなって困ってるんだ。
339デフォルトの名無しさん:2006/07/31(月) 08:36:10
デバッガの身になって考えてみろ
いったいどこでブレークすればいいのか
ソースには実行コードのアドレスなんて書いてないぞ
340デフォルトの名無しさん:2006/07/31(月) 08:38:22
「元のバージョンと完全に一致するソースファイルを必要とする」のチェックを
外せば一応動くようには見えるが、これチェック外すのはまずいよな。
何とか元通りに動くようにしたいんだが。
341デフォルトの名無しさん:2006/07/31(月) 08:41:29
>>339
でもプロジェクトのプロパティを最近変更したりしてないんだよ。
前からデバッグ情報吐くようにしてるしビルドの構成も変えてないし、
いろいろ触ったけど治らないんだ。
342デフォルトの名無しさん:2006/07/31(月) 08:42:27
よくライブラリのヘッダをいじる馬鹿がいるから
ライブラリのソースもいじるやつがいそうだな
343デフォルトの名無しさん:2006/07/31(月) 08:49:42
一応タイムスタンプで検索掛けてみたけど流石にそれは無かったw
344デフォルトの名無しさん:2006/07/31(月) 08:57:35
そういう時こそ某謹製のTOUCH.EXEですよ。BDS2006になっても
ちゃんと入っているぞ。
345デフォルトの名無しさん:2006/07/31(月) 09:07:06
TOUCHってタイムスタンプの更新するだけじゃないの?
それに、Borlandは持ってないからなあ。

仕方ない、使える間はバージョンチャック外して誤魔化すしかないかな。
346デフォルトの名無しさん:2006/07/31(月) 09:12:53
通報しますた
347デフォルトの名無しさん:2006/07/31(月) 09:15:57
いやオプションのことだからw
348デフォルトの名無しさん:2006/07/31(月) 11:09:08
>バージョンチャック

それはさておき、全部リビルドすれば済む話なんじゃないか?
349デフォルトの名無しさん:2006/07/31(月) 19:36:07
>>348
単なるリビルドだけじゃダメだった。

でも治ったので一応報告。

1.Release、Debugフォルダをフォルダごと削除して、インテリDB(*.ncb)も削除。
2.ツール>オプション>デバッグ>全般で「元のバージョンと完全に一致するソースファイルを必要とする」
のチェックを外してからブレークポイントを一箇所指定してDebug構成でリビルド、実行。
3.この時点でブレークポイントが有効になるのを確認して、再度1.の作業をする。
4.ツール>オプション>デバッグ>全般で「元のバージョンと完全に一致するソースファイルを必要とする」
のチェックを入れてからブレークポイントを一箇所指定してDebug構成でリビルド、実行。

これで治った。(他にも何かやったかもしれんけど覚えてる限り書いてみた)
>>2もまだダメなら試してみて。
350デフォルトの名無しさん:2006/08/01(火) 17:37:24
質問です
unicodeにも対応したWindowsプログラムを作っています。
マクロでUNICODEを定義してTEXTマクロやlstr***関数や
文字列の型をTCHAR型を使ったりしています。

しばらくそれでやっていたのですが、WinMainを変えるのを忘れたと思い

_tWinMain を使って第3引数をPTSTRにしたらリンクエラーが出たので
調べたらtchar.hを使えばいいみたいなので使うと
そのエラーは消えたのですが、C2731が出てしまいます。
エラーはPSTRに戻せばなくなるのですが、せっかく_tWinMainを使っているのに
意味がわからないです。

試しに、tchar.hを使わないで直接自分で_tWinMainマクロを
作ってやると、PTSTRを使っても何も問題なく出来ました。
もちろんwWinMainと直接書いてやっても大丈夫です。
その場合リンクのエラーも出ません。

一応、tchar.hを見てみると_tWinMainを使ったときにwWinMainとWinMainが
選択出来るようにされているような気がするのですが
なぜなのでしょう?

ちなみに、使用しているのはTOOLKIT2003です。
よろしくお願いします。
351デフォルトの名無しさん:2006/08/01(火) 17:55:24
お前は本当にtchar.hを見たのかと。

tchar.hはUNICODEじゃなくて、_UNICODEなんだけど。
352デフォルトの名無しさん:2006/08/01(火) 18:13:53
>>351
申し訳ない…目が潰れてたようです。
確かにそう書かれてました。ありがとう
でも、webで解説してるところってそれに触れてないところが多いなぁ…
他のバージョンではまた違うのかな
353デフォルトの名無しさん:2006/08/01(火) 18:36:22
気付いていないやつも多いと思う。
<tchar.h>を<windows.h>やその他Platform SDKのヘッダより
後にインクルードするとそんな悲劇は起こりにくい。
どこかのヘッダで、UNICODEが定義されているのに_UNICODEが定義されていないと
それを定義したり、あるいはその逆を行ったりしているはずだから。
354デフォルトの名無しさん:2006/08/09(水) 20:36:01
calloc()した領域をfree()で解放してるつもりが間違って
deleteしてたんだけど、一見正常に動いていた。
delete文を削除するとしっかりメモリリーク起こすけど、
delete文があると正常動作する。
これは正しい結果なんでろうか?
本読んでもググってみても別物として説明されてるんだけど・・・
355デフォルトの名無しさん:2006/08/09(水) 21:20:29
言語仕様上別物

たまたま動いてるのはおそらく
内部でfree()かそれに相当する処理を呼ぶような実装だからだと思う
356デフォルトの名無しさん:2006/08/09(水) 21:48:34
>>355
サンクス、やっぱり別物なんだね。
free()に直しときます。
357デフォルトの名無しさん:2006/08/09(水) 21:50:51
>356
俺なら質問する前に直しているだろうなぁ。
358デフォルトの名無しさん:2006/08/09(水) 22:05:28
いや、もちろん先に直してるけどさw
そのままdeleteを使わないって意味で書いただけだよ。
でもfree()が中で何やってるか判ると面白いんだけど
定義があるだけでソースは覗けないんだね。
359デフォルトの名無しさん:2006/08/09(水) 22:51:02
>>358
お前プログラマに向いてないから、さっさとやめてしまえ
360デフォルトの名無しさん:2006/08/09(水) 23:05:25
意味の無い煽りをするプログラマもいらんな
361デフォルトの名無しさん:2006/08/09(水) 23:19:45
まあ夏だしあちこちに湧いてるな
362デフォルトの名無しさん:2006/08/09(水) 23:19:50
>>360
意味の無い煽りか?
>>354のような考え方をするプログラマなぞ、この世にいらんのだが。
363デフォルトの名無しさん:2006/08/09(水) 23:25:41
>>358
デバッグモードにして、逆アセンブルの表示にしてステップ動作をすると
覗ける。但しアセンブラの知識が必要だけどな。
364デフォルトの名無しさん:2006/08/10(木) 14:36:09
>>362
万年デスマ要員乙www
365デフォルトの名無しさん:2006/08/10(木) 23:05:22
>>364
14:30に「www」か?ごくろーさん
366デフォルトの名無しさん:2006/08/11(金) 00:29:40
休暇も取れずに今日もデスマですか、可哀相に。
367デフォルトの名無しさん:2006/08/11(金) 10:52:33
だから煽るしか能が無いんだろうねwww
368デフォルトの名無しさん:2006/08/13(日) 01:06:04
>>366,367
くだスレだ好きに居座っとけよ
www使いの低脳
369デフォルトの名無しさん:2006/08/13(日) 01:59:17
違うよきっと本当はいい奴なんだよ
ただちょっと激務で寝てなくて脳に毒がたまってるんだ
370デフォルトの名無しさん:2006/08/13(日) 02:06:55
職場に毛布は基本ですか?
371デフォルトの名無しさん:2006/08/13(日) 02:20:08
上げてまで余程悔しかったんだろうね
ここで好きなだけ愚痴るといいと思うよ
372デフォルトの名無しさん:2006/08/13(日) 06:35:18
#include<stdio.h>

struct man{
char name[32];
int age;
};

int main()
{
struct man student;

strcpy(student.name,"山田太郎");
student.age=16;

printf("生徒の名前は%sです\n",student.name);
printf("年は%sです\n",student.age);
return 0;}

これどこか間違ってるところありますか?
本に書いてあったやつをそのまま写したつもりなんですが
strcpy識別子は、引数依存の照合を使用しても見つかりません
ってなります
373デフォルトの名無しさん:2006/08/13(日) 06:37:57
>>372
つ[#include <string.h>]

あー、処でC++としてコンパイルしていないか?
混乱するといけないからCとしてコンパイルした方がいい気もするが。
374デフォルトの名無しさん:2006/08/13(日) 06:39:04
もう一つ。二度目のprintf()のフォーマット指定に間違いがある。
375デフォルトの名無しさん:2006/08/13(日) 14:45:18
実行時例外で落ちるね。
376デフォルトの名無しさん:2006/08/13(日) 17:04:30
sは文字列るるるるるー
377デフォルトの名無しさん:2006/08/17(木) 22:56:01
VC++2005って可変長配列とかいうの使えるの?
378デフォルトの名無しさん:2006/08/17(木) 23:01:35
メモ帳って可変長配列とかいうの使えるの?
379デフォルトの名無しさん:2006/08/17(木) 23:07:25
vectorなら。
380377:2006/08/17(木) 23:22:50
Standard Template Libraryとかいうの使わないと無理って事ですか?
C(C99?)だけでは使えない?
381デフォルトの名無しさん:2006/08/17(木) 23:24:26
C99には対応してないよ。
mallocaでも使っとけ。
382デフォルトの名無しさん:2006/08/17(木) 23:32:46
2005とかたいそうな名前付けてる癖にC99未対応とは!!
383デフォルトの名無しさん:2006/08/17(木) 23:38:44
VC++がC99対応しても、C言語(.c)でないと使えないとかいうオチがありそうだな。
384デフォルトの名無しさん:2006/08/18(金) 00:29:55
当たり前じゃん。C99はCだ。
385デフォルトの名無しさん:2006/08/18(金) 00:37:46
いや、gccとか(ry
386デフォルトの名無しさん:2006/08/18(金) 02:19:19
VC++はVC++であって、VC/C++ではない、だからC99対応シネーヨ
っていう話が開発チームあたりから出てた気がする
387デフォルトの名無しさん:2006/08/18(金) 02:27:43
C99なんて糞
388デフォルトの名無しさん:2006/08/18(金) 02:37:33
Cの仕様拡張はC++と同期を取ってもらいたい。
389デフォルトの名無しさん:2006/08/18(金) 07:55:24
>>388
C++のTR1には、C99で拡張された標準ライブラリが含まれている。
390デフォルトの名無しさん:2006/08/18(金) 09:11:00
C++がCに合わせるんじゃなくて
CがC++に合わせた方がいい
391デフォルトの名無しさん:2006/08/19(土) 00:02:58
Visual C++ 2005 Express Edition 質問箱
http://pc8.2ch.net/test/read.cgi/tech/1140806916/
今はデータ落ちしていますが、上記スレの267さんが
> Professional Editionだろうと何だろうと使ってるライブラリの名称は入れる仕様らしい。
と書かれていますが、Microsoft製以外のランタイムライブラリの名称も入れる仕様でしょうか。
392デフォルトの名無しさん:2006/08/19(土) 00:19:02
 
393デフォルトの名無しさん:2006/08/19(土) 00:19:44
.
394デフォルトの名無しさん:2006/08/19(土) 01:48:37
デザインで作成したTextBoxのテキストに変数を入れたいのですが、
const char *text = "xxxxx";
this->textBox1->Text = text;
と入力しても、System::Stringに変換できなくてエラーを吐きます。
どうしたら良いでしょうか。アドバイスお願いします。
395デフォルトの名無しさん:2006/08/19(土) 02:50:19
>>394
TextBox1->Text = gcnew String(text);

C++/CLIはこちらのスレの方が適当かもしれん。
つ くだすれC++/CLI(初心者用)
396デフォルトの名無しさん:2006/08/19(土) 11:29:10
>>394
C++/CLIならtextBox1->Text = gcnew System::String(text);
Managed C++ならgcnewをnewにすればよい。
397394:2006/08/19(土) 14:04:46
皆さんありがとうございました。無事出来ました。
398391:2006/08/19(土) 17:47:31
どなたか分かりませんでしょうか。
399デフォルトの名無しさん:2006/08/19(土) 17:49:43
>>398
質問内容をまとめて、改めて質問しなおせ
400デフォルトの名無しさん:2006/08/19(土) 18:58:09
>>399
説明不足ですみません。
使ってるライブラリの名称を入れるというのは、
コンパイルした実行可能ファイルに
使ってるライブラリの名称を埋め込むということです。
401デフォルトの名無しさん:2006/08/19(土) 21:37:59
「Platform SDK」を使用したプログラムで
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/
↑のURLに書いてある通りにしてそのままコンパイルすると
空のウィンドウとメニューバーを作成するプログラムが出来ますが
このプログラムは再配布が必要なDLLに依存しているのでしょうか。
402デフォルトの名無しさん:2006/08/19(土) 22:02:08
つdependency walker

# コマンドラインで使える、似たようなツールある?
403デフォルトの名無しさん:2006/08/19(土) 22:25:48
dumpbin?
404デフォルトの名無しさん:2006/08/19(土) 22:32:47
依存するDLLがわかっても、どれが再配布が必要なのかの見分けがつかない罠
405デフォルトの名無しさん:2006/08/19(土) 22:38:34
vs2005のvcでアプリを配布するときは、vcredist_x86.exeをインストールさせるのが一番楽。
406デフォルトの名無しさん:2006/08/19(土) 22:49:10
MSDN ライブラリ > 開発ツールと言語 > Visual Studio ドキュメント > Visual C++ > 配置 > 再配布する DLL の決定
407400:2006/08/20(日) 00:03:09
まだ説明不足でしょうか。
408デフォルトの名無しさん:2006/08/20(日) 00:24:44
>>407
よく分からないので、勘で書く。
あるEXE内に、使用するライブラリ名称の文字列が埋め込まれるかどうかという話であれば、
それがMS製かどうかにかかわらず埋め込まれる。
そうしないと、ロードできないので。
409デフォルトの名無しさん:2006/08/20(日) 01:03:38
>>408
分かりにくかったですか、すみません。
その勘で合っています。回答ありがとうございました。
410デフォルトの名無しさん:2006/08/20(日) 01:21:39
ぶっちゃけ文字列ならライブラリの作者の任意で何でも埋め込める。
411409:2006/08/20(日) 02:02:11
気になったのですが、実行可能ファイルに埋め込まれている
Microsoft Visual C++ Runtime Library
という文字列を消して配布するとライセンス違反になるらしいのですが、
本当でしょうか。
412デフォルトの名無しさん:2006/08/20(日) 02:49:19
>>411
ライセンス関連はメーカーに聞いたほうがいいぞ。

> * 再頒布可能コードにおける著作権、商標または特許の表示を改変すること。
俺が、削除することはは改変に当たらないと思って、
問題ないと答えれば、間違ってたとき、困るのはお前だ。
413デフォルトの名無しさん:2006/08/20(日) 03:06:47
っていうか消したい理由がわかんね
414デフォルトの名無しさん:2006/08/20(日) 19:27:45
Visual C++ Express Edition をCDイメージからセットアップしました。
その使用許諾書には次のようにありました。(便宜上、下の文は適時改行を行っています。)

5. アクティベーション (ライセンス認証) の義務。
本ソフトウェアは、許可されていない使用を防止するため、
アクティベーションが必要な場合があります。
インストールの際に提示される手順でアクティベーションを実行しない場合、
本ソフトウェアが使用できなくなります。
本ソフトウェアのアクティベーションは、インターネットで行うことができます。
アクティベーションに際して、インターネットの通信料金が発生することがあります。
お客様がコンピュータのハードウェア構成を変更した場合や、
本ソフトウェアの設定を変更した場合には、
本ソフトウェアのアクティベーションを再度行う必要が生じることがあります。
本ソフトウェアは、アクティベーションが実行されるまで、
アクティベーションが必要なことをお知らせします。

検索して調べてみると、ハードウェア構成や設定を変更した時に、Web/ISOのどちらから
インストールした場合でも、アクティベーションが必要になることはないと書かれていましたが
これは事実でしょうか。
415デフォルトの名無しさん:2006/08/20(日) 20:36:03
edwop
416デフォルトの名無しさん:2006/08/21(月) 03:48:35
本の通りに
作成したアプリケーションの
インストーラを作ろうとしているのですが、

setupのプロジェクトをビルドしている間に
インストールの準備画面が出て、

1706エラー で
有効なソースが見つかりません。

という感じのことを言われてしまい
setup.exeもできません。

1706 エラー などでぐぐって見ましたが
解決策を見つけることができませんでした。

どなたか、解決策をご教授ください。
417デフォルトの名無しさん:2006/08/21(月) 16:15:25
visual c++を使っていて
win32プロジェクトを開いてそのままビルドしようとしたら
undefined keyword or key name: DS_MODALFRAME
ってなりました
誰か助けてください
418416:2006/08/21(月) 18:42:44
早く答えてください。
419デフォルトの名無しさん:2006/08/21(月) 18:46:17
はずれだったんじゃないかな
420416:2006/08/21(月) 18:46:36
すみません、自己解決しました。
421417:2006/08/21(月) 21:11:57
誰も分からないのか
使い物にならないオタクどもは死ね
422417:2006/08/21(月) 21:16:07
すみません、自己解決しました。
423デフォルトの名無しさん:2006/08/21(月) 22:11:17
自己解決したとだけ言って去る奴は
後続のために解決法を書くくらいしろよ。
まあ>>417はネタっぽいが。
424デフォルトの名無しさん:2006/08/21(月) 22:31:54
後続のためとか所詮は奇麗事
425416:2006/08/21(月) 23:05:37
>>420
いやいや、自己解決してません。

あなただれ?
きっと2chに慣れてない私への嫌がらせなんでしょう。

これでショックを受けてしまった私って
2chに書き込むべきではない??
426425:2006/08/21(月) 23:19:50
すいません、逆切れしました。
427デフォルトの名無しさん:2006/08/21(月) 23:20:50
>>416はエスパー降臨待ちか
428416:2006/08/21(月) 23:21:50
>>425
あなたこそ誰ですか?
偽者を演じるのは止めてください。
本当に迷惑しています。
429デフォルトの名無しさん:2006/08/21(月) 23:22:19
>>425
メンバ登録の、もっと親切なサイトに行ったら。
430425:2006/08/21(月) 23:28:13
>429
わかりました。ありがとうございました。
431425:2006/08/21(月) 23:32:44
偽者の>416がまるで私が粘着荒らしのようにしつこく書き込んでいるようです。
お騒がせして申し訳ありません。

最初の私の質問がきっと悪かったのですね。今度からはもう少し自分で努力を
してから質問を書くようにします。

しばらく私はこのスレには書き込みません。今後出てくるのは私の偽者ですので
無視してください。
432425:2006/08/21(月) 23:37:49
ちょwwwwwwww
433デフォルトの名無しさん:2006/08/21(月) 23:39:54
変な話だが本物は偽者を見習え。
434417:2006/08/22(火) 00:10:36
解決してません
>>421>>422は偽者です
まともな理性をお持ちの方教えてください
435デフォルトの名無しさん:2006/08/22(火) 02:34:39
再インストールしたら?
436デフォルトの名無しさん:2006/08/22(火) 03:35:47
>>434
俺もなったが、再インストールで直った。
437デフォルトの名無しさん:2006/08/22(火) 03:37:50
format:c
438デフォルトの名無しさん:2006/08/22(火) 05:17:24
maid sum c/c
439417:2006/08/22(火) 09:35:54
再インストールしても直らなかったんですが・・・
440デフォルトの名無しさん:2006/08/22(火) 09:43:58
VC6のヘルプで1760を検索してみた

1706 16 System table '%.*s' was not created, because ad-hoc updates to system catalogs are not enabled.
441デフォルトの名無しさん:2006/08/22(火) 09:44:18
インストールと設定の仕方見直せ
442417:2006/08/22(火) 10:15:28
もう少し具体的に教えていただけないでしょうか?
443417:2006/08/22(火) 10:16:44
自己解決しました。ありがとうございました。
444417:2006/08/22(火) 10:27:29
>>443
してねーよ
しつこいよあんた
445デフォルトの名無しさん:2006/08/22(火) 12:51:37
以上、名無しの提供でお送りしました
446デフォルトの名無しさん:2006/08/22(火) 22:26:22
質問です。

Visual C++で作ったC++アプリケーションがその動作に
.NET Framework2.0を要求するなんて事って、あるんでしょうか。
友達に作ったアプリを渡したら.NET Framework2.0を入れたら動いた、と言われました。
別にC++/CLIとか使っていないんですが・・・。

どなたか分かる方お願いします。VSのバージョンはVisual Studio 2005 Standard Editionです。
447デフォルトの名無しさん:2006/08/22(火) 22:41:28
ソースは純粋なC++でもプロジェクトがmanagedだったんじゃないの?

448デフォルトの名無しさん:2006/08/22(火) 23:04:53
>>447
いえ、ちゃんとWIN32コンソールアプリケーションにしました。
あと、プロジェクトの構成プロパティの「共通言語ランタイム サポート」も
「共通言語ランタイム サポートを使用しない」にしています。
449デフォルトの名無しさん:2006/08/22(火) 23:07:11
MFCを使ったVC++プログラミングを始めたく、VisualStudio2005ACの
購入を検討しております。

今月まで学生で、来月から仕事始まるんですけど、いまアカデミックパック
を買ったは良いが今後のサポート等が学生ではないから打ち切られる
なんて事になったりはしないですか?

また、購入したは良いがインストール時に学生証が必要になって、
卒業後はインストールが出来ないとかいう罠に陥ったりしないか心配です。
450デフォルトの名無しさん:2006/08/22(火) 23:11:35
打ち切られるし、有効な学生証が必要。
451デフォルトの名無しさん:2006/08/22(火) 23:15:54
>>448
ランタイムライブラリを動的リンクしているのはないだろうか。
.NET Framework 2.0にはVC++ 2005用のランタイムも含まれているので、
それをインストールして通常のC++アプリケーションが動くようになるということは十分考えられる。
452デフォルトの名無しさん:2006/08/23(水) 00:50:08
>>446
CランタイムをMT で静的にリンクする。
または、STD版以上ならインストーラを作る。
または、これを別途インストールさせる。
ttp://www.microsoft.com/downloads/details.aspx?familyid=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&displaylang=ja
453デフォルトの名無しさん:2006/08/23(水) 03:20:58
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
454デフォルトの名無しさん:2006/08/23(水) 03:22:30
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
455デフォルトの名無しさん:2006/08/23(水) 03:23:46
Visual C++ 2005 ExpressでPlatform SDKを使用せずに
他のライブラリを使用してネィティブな機械語コードの作成は可能ですか?
456デフォルトの名無しさん:2006/08/23(水) 03:32:31
他のライブラリって?
457455:2006/08/23(水) 04:18:12
STLです。
458デフォルトの名無しさん:2006/08/23(水) 04:21:22
可能です
459デフォルトの名無しさん:2006/08/23(水) 10:26:46
>>451
>>452
ありがとうございます!
Dependency Walkerで調べたところ、
MSVCR80.DLL
MSVCP80.DLL
に依存しているみたいです。
「Microsoft Visual C++ 2005 再頒布可能パッケージ (x86)」をインストールすると
二つのDLLなどを含むVC++アプリを実行するために必要なものがシステムに入るという
理解で良いのでしょうか。
あと、再配布可能ということは、これをパッケージをそのまま相手に渡してもかまわない
ということでしょうか。
460デフォルトの名無しさん:2006/08/24(木) 02:54:52
VC++ 2005 ExpressでCの勉強してる最中で
初歩的質問ですが
whileループで連続文字入力中にEOFで入力終了を検知させるのに
Ctrl + Z
を押しても無視されるのを使えるようにしたいんですが
どうしたらいいでしょうか?
461デフォルトの名無しさん:2006/08/24(木) 03:16:16
>>460
ソースをさらしたほうが早い気がする。
462デフォルトの名無しさん:2006/08/24(木) 08:32:57
>>460
標準入力が^Zで閉じられるのを回避したいのなら、標準入力を諦めてその他の入力手段を使え。
463デフォルトの名無しさん:2006/08/24(木) 12:57:20
MASM(ml.exe)を入手したいのですが、
.NET Framwork 2.0 SDKにMASMは付属しているでしょうか?
464デフォルトの名無しさん:2006/08/24(木) 13:14:24
>>463
知らん!


Visual C++ 2005 Expressインスコしてるなら、
http://www.microsoft.com/downloads/details.aspx?FamilyId=7A1C9DA0-0510-44A2-B042-7EF370530C64&displaylang=en
でインストール可能。商用不可。
465デフォルトの名無しさん:2006/08/24(木) 19:21:33
>>461
たとえば、

while ((ch = getchar()) != EOF) {
ch = toupper(ch);
putchar(ch);
}

において、Ctrl + Z(UNIXでは Ctrl + D )
でループを抜けると書籍にありますが
無視されるようです(Win2000使ってます)。
検索してみると
「Ctrl+Z」は「Undo」のショートカットキーになっているためか、
その後の printf() などの出力を打ち消してしまう
この現象はWindows9xとMeのDOS窓のバグのようです。
とあります。
eclipseというのではキーバインディングを変えるとか出てますが
ttps://bugs.eclipse.org/bugs/show_bug.cgi?id=34052
466デフォルトの名無しさん:2006/08/24(木) 19:39:47
コンソールの先頭(リターンした直後)でCtrl+Zじゃないと、EOFにはならんぞ。
あと、chの型は?
467デフォルトの名無しさん:2006/08/24(木) 22:21:47
>>466
int ch;
です。
Ctrl + C
だと強制終了みたいです
468デフォルトの名無しさん:2006/08/24(木) 22:48:38
VC++ Express & PSDKの環境で開発していたアプリケーションの
ソースコードを修正なしで、VC++ Professionalのunmanagedコードとして
コンパイルすることって可能ですか?
469デフォルトの名無しさん:2006/08/25(金) 00:58:16
>>465
それはEclipse内での話じゃないのか?
cmd.exeの話なら普通にCtrlZが使えるぞ。
470デフォルトの名無しさん:2006/08/25(金) 23:52:45
>>2
>>335
「ブレークポイントは、現在の設定 ではヒットしません。ソースコードが元のバージョンと異なります。」

おれも今なって、なんとか解決した。
ビルドの設定とかは全く関係ない。
大体、突然発生したものだし。

問題は、ブレークポイントが設定できないCPPファイルのテキストコードがおかしくなってて
正常に読み込めなくなっているからだった。
このCPPファイルをバイナリエディタで読み込んで、全コードをコピーしようとしたら必ずエラーが発生した。
分割して何とか全コードをコピーしてみてみると、バイナリエディタに表示されたコードと異なって、
途中に00がたくさん出てくるコードになってた。

新規テキストドキュメントを作成して、CPPファイルをコピーしても同じだった。

で結局、オレの場合は、1行何百桁だか何千桁の行が1つあって、それを複数行にしたら直った。
一時的にテストで、大きな配列に1000個くらいのテキストデータを代入したものだったが、馬鹿だった。

他に、キャリッジリターンのコードが変で、「ブレークポイントは、現在の設定 ではヒットしません。
ソースコードが元のバージョンと異なります。」が出た人もいるようだ。
オレの場合はこれは関係なかった。
http://www.freeml.com/message/[email protected]/0000411
471470:2006/08/26(土) 00:10:49
335は解決してたんですね。

バイナリエディタでコピーがエラーになるのは、単にファイルがでかくなりすぎてたからでした・・・orz
でも、長すぎた1行を50行に分割したら直ったのはホンマです。
472デフォルトの名無しさん:2006/08/26(土) 01:10:05
>で結局、オレの場合は、1行何百桁だか何千桁の行が1つあって、それを複数行にしたら直った。
>一時的にテストで、大きな配列に1000個くらいのテキストデータを代入したものだったが、馬鹿だった。

いや、まあ、その、なんだ。
自分でもわかってるんだろうし、いいや。
473デフォルトの名無しさん:2006/08/26(土) 18:10:48
イベントハンドラで追加した関数を、一番下から上の方にずらしていくつか作業したあと、その関数を全部削除したら
「ブレークポイントは、現在の設定 ではヒットしません。ソースコードが元のバージョンと異なります。」 がでた。

Ctrl+Zで削除した関数を復活させて/* */で囲んだら出なくなった。いらん関数が消せねー。

結局、VSのバグだな。
474デフォルトの名無しさん:2006/08/26(土) 18:33:07
新規のノートパッド文書にthis app can breakと書き込んで保存して読み出すと読み出せなくなる
ユニコード関連のバグと一緒かもな。
475デフォルトの名無しさん:2006/08/27(日) 00:54:13
>>468
MFCとか使ってなきゃ可能だろ
476デフォルトの名無しさん:2006/08/27(日) 19:00:56
質問させてください

VC6、SDK環境で開発してるのですが
MFCのCMonthCalCtrlコントロールは
SDKではなんと呼ばれているんでしょうか

ダイアログ画面のツールチップでは月間予定表と表示されますが
これでググってもCMonthCalCtrlや.NET
そして関係なさそうな情報がいっぱいヒットしますorz
477デフォルトの名無しさん:2006/08/27(日) 19:05:34
478476:2006/08/27(日) 19:09:55
>>477
ああ、それです!なんだか解決しそうな予感!
これからじっくり見てみます、ありがとうございました
479デフォルトの名無しさん:2006/08/27(日) 20:13:27
>>476-478
477の"date and time picker control"はMFCではCDateTimeCtrl
MFCのCMonthCalCtrlは"month calendar control"
猫の中だとこっちのページ↓
ttp://www.kumei.ne.jp/c_lang/sdk2/sdk_181.htm
480デフォルトの名無しさん:2006/08/27(日) 20:15:24
くだらないこと聞きます
すみません

ソースを提出しろって言われた場合具体的に何を提出すればいいんですか?
○○○.cppってやつでいいんですか?
481デフォルトの名無しさん:2006/08/27(日) 20:26:56
>>480
コンパイルが通るソースファイル群、一セットじゃね?
その○○○.cppだけでコンパイルが通ってモノが出来るなら、
それだけでいいと思われ。
482425:2006/08/27(日) 20:27:19
>480
出せと言った奴に聞け。条件によって異なる。
483デフォルトの名無しさん:2006/08/27(日) 20:29:01
>ソースを提出しろって言われた場合

>480 は学生に10シュクダイ
484476:2006/08/27(日) 21:02:54
>>479
どもです!
最初質問したほうはこっちのほうなんですね
複数選択もできるみたいなのでじっくり見てきます
スケジュール管理ソフトを作ろうとしてたので助かりました!
485デフォルトの名無しさん:2006/08/27(日) 21:16:25
今時の初心者に適した講座サイトってどこですか?
VC++2005を使っているのですが
サンプルが使えない所が多く困っています。
486デフォルトの名無しさん:2006/08/28(月) 01:14:03
猫でもわかるで検索しなさい。
487デフォルトの名無しさん:2006/08/28(月) 14:08:07
実はUnicode問題か何かで「使えない」と決め付けているだけだったりして。
488デフォルトの名無しさん:2006/08/28(月) 14:21:31
>>475
その回答はProfessional→Expressの時の話だから的外れ。
確かにPro→Expの場合はMFCとか使わないならいけるけど。
まあ、Exp→Proの場合も何の修正なしにでもいけるだろう。
489デフォルトの名無しさん:2006/08/28(月) 15:55:23
Visual Stadio6.0を一度アンインストールして、再度インストールしなおして、
Visual C++を立ち上げようとしたら、
『プライマリプラットフォームがありません。
ビルドシステムは使えません。セットアップがインストールしたアドオンプラットフォーム(.PKG)のロードに失敗した可能性があります。』
ってメッセージが出て、起動できないのですが、
どうすれば直るか、ご存知の方、いらっしゃいませんか?
もう4,5回アンインストール、インストールを繰り返していますが、
うまくいきません。

ご存知の方いらっしゃいましたら、お助けください
490489:2006/08/28(月) 15:56:35
失礼 ミスった
Visual Stadio6.0→Visual Studio6.0
491476:2006/08/28(月) 22:41:12
再び質問させてください
VC6、SDK環境です

MFCのクラスや<time.h>以外で
よく使われてそうな日付を扱うクラスってありますか?
492デフォルトの名無しさん:2006/08/28(月) 23:16:55
493476:2006/08/29(火) 00:46:14
>>492
早速見てきました、さんきゅーです!
SYSTEM構造体を使って目的のコードが書けそうです、助かりました
494デフォルトの名無しさん:2006/08/30(水) 00:56:32
>>475>>488
レスありがとうございます。
ProfessionalとExpressは、MFC等を除いて
基本的にどちらも同じプログラムで良いということですか?
495デフォルトの名無しさん:2006/08/30(水) 03:50:17
WriteFile関数でシリアライズするのって可能ですか?
496デフォルトの名無しさん:2006/08/30(水) 09:33:08
DLLファイルがあって、その中の人の関数コールはどうやれば良いでしょうか?
497デフォルトの名無しさん:2006/08/30(水) 09:35:58
LoadLibraryから GetProcAddressとか。
498デフォルトの名無しさん:2006/08/30(水) 09:51:44
サンクス>>497
499デフォルトの名無しさん:2006/08/30(水) 10:04:38
度々すみません、DLLの中の関数を見る方法を教えて頂けないでしょうか?

GetProcAddressの引数に関数名が要りますし、先にDLLの中を確認できれば安心して開発できそうでつ。
500デフォルトの名無しさん:2006/08/30(水) 10:05:51
Dependency Walker
501デフォルトの名無しさん:2006/08/30(水) 10:13:19
サンクス>>500

真ん中のペインに関数が見れます田。これは便利なツールでつね。

M$CでWinソフトを作ってたときから今日まで知りませんでした。
502デフォルトの名無しさん:2006/08/30(水) 10:48:27
>error C2537: 'Fortran' : リンケージ指定子は使用できません。

これってどういう意味なんでしょう?
503デフォルトの名無しさん:2006/08/30(水) 10:54:05
Fortranリンケージ指定子はサポートされてないよ。
504デフォルトの名無しさん:2006/08/30(水) 11:04:24
>Fortranリンケージ指定子

これって何者で、

>サポートされてないよ。

どのコンパイラが対応してるんでしょ?
505デフォルトの名無しさん:2006/08/30(水) 11:43:15
マルチスレッドDLLでコンパイルしています
シングルにはわけあって出来ません

クラス内からスレッドを作る時にクラスのポインタを渡しています
スレッド内からポインタを参照してメンバ変数にアクセスすると未設定値が帰ってきます
値は設定済みです

このクラスは複数実行されるのでグローバル変数は使えません
メンバ変数は数値や配列やクラスなどいろいろあります

このメンバ変数に設定された値を正常に取得するにはどうしたらいいのでしょうか?
506デフォルトの名無しさん:2006/08/30(水) 11:44:34
なんで状況説明できないやつに限って問題が再現する最小限のコードを貼らないのだろう。
507デフォルトの名無しさん:2006/08/30(水) 11:55:44
MFCだとできた
508デフォルトの名無しさん:2006/08/30(水) 12:01:04
>>506
再現する最小のコードにする過程で問題が解決するか、そもそもその能力がないから。
509デフォルトの名無しさん:2006/08/30(水) 15:08:16
VC2005expressで作ったexeファイル(CLR/Windowフォーム)を
配布するには、どーすりゃいいんですか?
2005expressが入っていないマシンで動かしてもらったら、動かないといわれたんですが
510デフォルトの名無しさん:2006/08/30(水) 15:12:40
LoadLibraryした瞬間に、
>Salford run-time library
>Stack Overflow: Re-link program with bigger stack value.
>(stack:reserve,commit)
>.Wll attempt to trace back
エラーが出ます。

少しずつアプリのStack Sizeを大きくしましたが現象は同じで、
0x2,000,000でアプリが起動しなくなりました。

どうしたら良いでつか?
511デフォルトの名無しさん:2006/08/30(水) 15:23:44
>>509
CLR使ってるなら.NET Frameworkの再配布モジュールを入れさせる。
ATLやMFCなども使ってたら別にvcregist_x86も必要。
どっちもMSのサイトからダウンロードできる。

もしDEBUGビルドを渡してるならReleaseで作り直せ。
512デフォルトの名無しさん:2006/08/30(水) 15:26:34
>>510
ところでそのDLLにインポートライブラリは付いてないのか?
付いてるならそれを使ったほうがいいぞ。
513510:2006/08/30(水) 15:32:14
付いてないです。



確か、DLLからインポートライブラリ作れるんですよね?
514デフォルトの名無しさん:2006/08/30(水) 17:57:11
515デフォルトの名無しさん:2006/08/30(水) 23:05:59
>>494
多分大丈夫だと思うよ。
試したことないんで、試したことのある人は報告でも頼む。
516デフォルトの名無しさん:2006/08/31(木) 04:09:53
ダイアログボックスの中にボタン等を配置する方法はわかったのですが、メインウィンドウの中にボタンを配置させたりはできないのでしょうか?
色々調べてみてもダイアログに関することしか載ってないのですが、こういう場合はウィンドウを作らずにダイアログボックスをメインウィンドウの代わりにする・・・様な方法を使うしかないんでしょうか?
517デフォルトの名無しさん:2006/08/31(木) 11:08:03
>>511
できましたー。
どもです。
518デフォルトの名無しさん:2006/08/31(木) 19:27:36
>>516
どんなことでもできるよ
いろいろやり方が違うだけ
スプリッターにはめこむのと、上の乗せるだけでもやり方が違う
519デフォルトの名無しさん:2006/08/31(木) 19:35:32
>>516
基本を覚えとくと理解しやすいので教えときますと
フレームクラスは外枠のみだと思ってください
外枠にはなにも乗せられません
この外枠にはめこまれてるのがウィンドウクラスです
ウィンドウクラスはすべての部品クラスの原型です
ダイアログもボタンもすべてウィンドウクラスです
例えば外枠にダイアログをはめ込むなんてこともできます
つまりはめ込ませた先のウィンドウクラスにならボタンを貼り付けることができます
520デフォルトの名無しさん:2006/08/31(木) 20:17:13
>>516
ReBar で検索してミソ。
やりたいことによってはReBarでいけるかもしれん。
521デフォルトの名無しさん:2006/08/31(木) 21:45:46
>>519
フレームクラスもウインドウですよ
上にViewが乗っかってる場合が多いけど
522デフォルトの名無しさん:2006/08/31(木) 22:22:21
>>521
だれも内部的な話はしてなねーよ
概念の話してんだよ
523デフォルトの名無しさん:2006/09/02(土) 18:22:37
VC6.0がクラスや構造体の補完機能やコンパイル時に
頻繁に固まるようになってしまっていい加減ぶち切れ気味なので、
OS入れなおしついでにVS2005買って入れようかと思います。
C++/CLIとか新しいのがあるみたいですが、
C/C++とWin32APIの勉強しかしてなくて、ついでに.NET Frameworkを
配布先のPCに要求するのも嫌なので、入れなくてすむようにしたいと思うのですが、
GUI構築の機能はなにやら便利そうなので使ってみたいんですけど、
.NET Framework無しでも利用できる手段ってありますか?
524デフォルトの名無しさん:2006/09/02(土) 19:19:29
>>523
先ずはExpressEditionをダウンロードして試してみたら?
で、2005EEスレに行けばデザインツールも紹介されていたと思う。
525デフォルトの名無しさん:2006/09/02(土) 21:35:06
>>523
>C/C++とWin32APIの勉強しかしてなくて、ついでに.NET Frameworkを 
>配布先のPCに要求するのも嫌なので、入れなくてすむようにしたいと思うのですが、 

散々出てることなのだがこれは間違い。配布先はvcredist_x86.exeでおk〜。
http://www.microsoft.com/downloads/details.aspx?FamilyId=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&displaylang=ja
526デフォルトの名無しさん:2006/09/03(日) 15:50:24
DirectXの読み方ってダイレクトエックスであってますか?
527デフォルトの名無しさん:2006/09/03(日) 15:55:07
俺もそう読んでいる。
528デフォルトの名無しさん:2006/09/03(日) 15:56:12
>>526
直ダメ
529デフォルトの名無しさん:2006/09/04(月) 00:28:01
ダイレクトクズ
530デフォルトの名無しさん:2006/09/04(月) 03:57:47
skypeにhookしてskypeの会話音声データを録音ってできないものかな
531デフォルトの名無しさん:2006/09/04(月) 14:59:44
質問です。

1. スケルトンを生成(Win32 アプリケーション)。
2. F5。
3. ウィンドウが出てこない。
4. デバッグメニューからデバッグ停止。
5. 「デタッチできません」とか言われてとりあえずデバッガは止まる。
6. タスクマネージャからプロセスを殺す。
7. タスクマネージャがフリーズ。

上記の手順3番目以降、シャットダウン、再起動不能。
電源落とすしか・・・

という現象に陥ってます。
解決法を教えてください。

ちなみに、MFCアプリケーションで
生成したスケルトンでも同様の現象になります。

OS win2k
VisualStudio .NET 2003
532デフォルトの名無しさん:2006/09/04(月) 18:51:53
win2kからクリーンインストール
533デフォルトの名無しさん:2006/09/04(月) 18:59:28
やっぱそうか・・・面倒だ
534デフォルトの名無しさん:2006/09/07(木) 21:35:24
Express から Standard にバージョンアップって可能ですか?
535デフォルトの名無しさん:2006/09/08(金) 06:21:44
c++の資格って何かありますか?
536デフォルトの名無しさん:2006/09/08(金) 08:21:44
やる気
537デフォルトの名無しさん:2006/09/08(金) 08:34:22
アップグレード版の話だろうか?
538デフォルトの名無しさん:2006/09/08(金) 08:57:05
C言語とJAVAの資格はよく聞くけど確かにC++の資格ってぴんとこない。
つか、存在するの?
539デフォルトの名無しさん:2006/09/08(金) 09:01:37
働くのに資格がいるわけじゃないから
ただの検定試験だろ
実社会では何の意味も持たないよ
540デフォルトの名無しさん:2006/09/08(金) 12:38:06
CListCtrlで、タイトル部と行で、左右配置を変えることは出来るでしょうか?
下記のようにタイトル部を中央配置にして、データ部を左配置にしたいのですが。

|  (タイトル)  |
|データ1     |
|データ2     |
|データ3     |
|_______|
541デフォルトの名無しさん:2006/09/08(金) 13:14:03
かつてhogeとして作ったプロジェクトを名前を変えてmogeというプロジェクトにしたいのですが
hogeを構成するcppファイルやヘッダファイル内部のすべてのhogeをmogeに置換して
(cppファイルやヘッダファイルの)ファイル名も
それらが入ってるフォルダ名もhogeが使われているものはすべてmogeにしたのですが
生成されるexeはhoge.exeのままです。

どうやったら完全にhogeプロジェクトをmogeプロジェクトに生まれ変わらせられるのですか?
542デフォルトの名無しさん:2006/09/08(金) 17:22:35
独学でVC++をやってるんだけど
メニューからダイアログを呼び出すプログラムを作ってるんだけど。
「猫でもできる」を参考にしたらできるけど、
.NETで自動生成された骨組を使って作ったら表示されません。
なにかサンプル載ってるサイトとかないかな?
543素人:2006/09/08(金) 18:13:25
Visual C++ 2005 Express Editionで、
ソリューションエクスプローラから[リソースファイル]-[○○○.ico]を
ダブルクリックすると、イメージエディタに○○○.icoが表示されようですが、
ペイントで表示されてしまいます。
ちなみに『Microsoft Visual C++ 2005アプリケーション開発入門』(日経BPソフトプレス)
には、上記の方法でやれば、できると書いています。
設定とか必要でしょうか?
544デフォルトの名無しさん:2006/09/08(金) 18:33:01
>>542
猫なんぞを使うなら、frameworkは使えない。
545デフォルトの名無しさん:2006/09/08(金) 18:36:37
どっかのスレでExpress Editionにイメージエディタついてない
と言ってた
546デフォルトの名無しさん:2006/09/08(金) 18:39:59
>>541
どっか変換が不完全なのか、中間ファイルが消えてないんでない?
検索してもhogeが見つからずリビルドしてもだめなら、中間ファイルを根こそぎ消してみるといいかも。
547素人:2006/09/08(金) 19:29:13
>>545
>どっかのスレでExpress Editionにイメージエディタついてない
>と言ってた

そうなんですか。困ったな。
548素人:2006/09/08(金) 19:57:38
日経BPソフトプレスに問い合わせてみました。
549デフォルトの名無しさん:2006/09/08(金) 20:10:29
アイコン書くだけならペイントやそこらのソフトで十分だろ
550素人:2006/09/08(金) 20:21:00
>549
ピクセルとかその辺の設定ができるソフトがないので。
551デフォルトの名無しさん:2006/09/08(金) 20:40:31
釣り確定
552デフォルトの名無しさん:2006/09/09(土) 09:06:40
SDKで開発しているのですが、
IEのお気に入りのようにツールバーにアイコンがあって、
それを押すと左側に出したり消したりできるウィンドウが作りたいのですが
こういうウィンドウを作ろうと思ったら
一般的にはMDIを利用することになるのでしょうか?
553541:2006/09/09(土) 12:28:41
>>546
ファイルを隅から隅まで手動で検索してもhogeの文字はなく
中間ファイルを(手動/自動で)消したりDebugビルドのフォルダそのものを消してみたりしましたが
やっぱり生成されるのはhoge.exeです。

もうわからなくなってきた…
554デフォルトの名無しさん:2006/09/09(土) 12:37:09
ゲームのシーン管理で、
シーンクラスはCSceneを継承するとして、シーン基本クラスを

virtual void Init(CD3DManager *pD3DManager, CInputManager *pInputManager) = 0;
virtual void Update() = 0;
virtual void Draw() = 0;

と定義し、CSceneManagerにシーンスタックを持たせようと考えたのですが、

vector<CScene> m_SceneStack;

で定義すると、 抽象クラスをインスタンス化できません。というエラーが出ます。
vectorを使うのは初めてで、どうも解決法が思いつかないのですが、どうすればよいでしょうか…?
555デフォルトの名無しさん:2006/09/09(土) 12:38:53
>>541
新規で空のmogeプロジェクト作って、ファイル追加したほうが早くない?
556デフォルトの名無しさん:2006/09/09(土) 12:38:55
>>554
抽象クラスをインスタンス化できないのは、vectorは無関係。それはそういうもの。
ポインタを使え。
557デフォルトの名無しさん:2006/09/09(土) 12:41:53
>>556
ああなるほど。
単純なミスですね・・・orz
即レスありがとうございます。
558541:2006/09/09(土) 12:49:45
自己解決。
ソリューションエクスプローラの左上のmogeソリューションのプロパティから
リンカ→出力ファイルを選んで「hoge.exe」から
「moge.exe」に書き換えるとOKでした。

>>555
もうちょっとやってダメだったらそうしようと思ってましたw
559554:2006/09/09(土) 13:02:43
もう1つ質問があります。
例えばCSceneManagerというクラスがCSceneの制御をする構造で、
CSceneクラス側からも、若干の制御をしたいのですが、
CSceneはCSceneManagerが見えていないのでポインタを持つことも出来ません。

つまり、

CSceneManager → CScene は見える
CScene → CSceneManager は見えない

という状況でCScene側からCSceneManagerを制御する方法ってありませんかね?


以前作ったプログラムではCSceneにフラグを持たせて、
毎回CSceneManagerがチェックするという方法を取ったのですが、
どうもスマートじゃないな、と思ったので。
560デフォルトの名無しさん:2006/09/09(土) 13:31:43
CSceneManagerがCSceneを登録するときに
CSceneのコンストラクタにCSceneManagerへのポインタを渡してやる
561デフォルトの名無しさん:2006/09/09(土) 15:08:34
>>558
どう見ても、ソリューションファイル内の文字列を書き換えてナインジャマイカ。
562554:2006/09/09(土) 15:36:34
>>560
ポインタを渡すことが出来ても、
CSceneからCSceneManagerのメソッドを呼び出せないですよね。
563デフォルトの名無しさん:2006/09/09(土) 15:38:30
>>562
へ?なんで?呼び出せるじゃん
564554:2006/09/09(土) 15:56:10
>>563

[CSceneManager.h]
#include "CScene.h"

class CSceneManager{
 private:
 vector<CScene> *m_pSceneStack;
};

[CScene.h]
#include "CSceneManager.h"

class CScene{
 private:
 CSceneManager *m_pSceneManager;
};


これでビルドすると、CSceneManagerがCSceneを定義するのは認められるのですが、
CScene.h内でCSceneManagerというオブジェクトが定義されていないよー、
というエラーがでるんです…。
565デフォルトの名無しさん:2006/09/09(土) 15:59:50
CScene hoge
566デフォルトの名無しさん:2006/09/09(土) 16:01:25
あ、お手つき、すまそ
567デフォルトの名無しさん:2006/09/09(土) 16:39:52
前方宣言
568554:2006/09/09(土) 16:56:03
>>567

[CScene.h]にて

Class CSceneManager:

の前方宣言で解決しました。

助言して下さった皆様、本当にありがとうございました。
569デフォルトの名無しさん:2006/09/09(土) 21:16:11
最近c++ を勉強しようと思っているのですが、visualc++2005と6.0とで
visualbasicみたいな、命令の違いってあるんですか?(ツッコミどころ満載だけど、超初心者なので許してクレ-)
570デフォルトの名無しさん:2006/09/09(土) 21:26:06
>>569
大文字小文字w

うそ、ごめん、おれはわかんね
571デフォルトの名無しさん:2006/09/09(土) 21:27:18
標準への準拠度
当然新しい方が準拠度は高い
572デフォルトの名無しさん:2006/09/09(土) 23:29:21
>>571
ご回答ありがとうございます!!
準拠度が高いってことは、オリジナルのC++に近くなってるってことですかね。
実際よくわかりませんが、とりあえず、ExpressEditionで勉強してみます。
ついでといってはなんですが、お勧めのVC++勉強用の書籍とかサイトとかがあったら
ゼヒ教えてください
>>570
ご指摘ありがとうw

573デフォルトの名無しさん:2006/09/09(土) 23:34:25
>>572
C#かVBかJAVAにしとけ
574デフォルトの名無しさん:2006/09/09(土) 23:34:32
c++ を勉強したいんなら
VC++勉強用の書籍とかサイトじゃなくて
C++勉強用の書籍とかサイト
575541:2006/09/09(土) 23:36:27
>>561
え?
ctrl+Fで「hoge」を「開いている全ファイル」から検索して置換しても
まだ足りないんですか?
576デフォルトの名無しさん:2006/09/09(土) 23:37:23
ここはC++スレじゃなくてVC++スレです
VC++でC++もできるけどそれはVC++じゃなくてC++です。
577デフォルトの名無しさん:2006/09/09(土) 23:38:00
578デフォルトの名無しさん:2006/09/09(土) 23:48:50
>>573
VBも考えたのですがランタイムが必要だし、色々な心意気の面で、ちょっと...
javaはC++の後にやろうと思ってます、でもC#の方がC++より習得し易いんですかね、
初めて知りますた。
579デフォルトの名無しさん:2006/09/09(土) 23:51:00
.netのような使いやすいネイティブライブラリはありませんか?
580デフォルトの名無しさん:2006/09/09(土) 23:51:53
>>578
言語使用はともかくMFCが糞。
581デフォルトの名無しさん:2006/09/09(土) 23:53:40
>>574
やっぱり、C++自体を学んだほうがいいんですよね、がんばってみます

二回もスマソ
582デフォルトの名無しさん:2006/09/10(日) 04:04:11
MFCも実はそんなに悪くない。


悪くないよね?
583デフォルトの名無しさん:2006/09/10(日) 04:18:19
MFCダイアログベースで作っております。ボタンを押すと参照画面が開き、指定したビットマップ画像がピクチャボックスに表示されるような
ものを作りたいのですが
CString FileName; // パス
CFileDialog *myDlg; // コモンファイルダイアログ

myDlg = new CFileDialog(TRUE,_T("bmp"),_T("*.bmp"),OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST,_T("*.bmp | *.bmp|"));

if(myDlg->DoModal() == IDOK)
{
// 選択ファイル名取得
FileName = myDlg->GetPathName();
}
ダイアログは出てくるのですが、これ以上がわかりません><
リソース画像をはっつけるやり方はわかってるんですが参照した場合こっからどうすればいいですか?
LoadBitmapとかじゃだめですよね?わかりません><

どなたかよろしくお願いしますm(_ _)m
584デフォルトの名無しさん:2006/09/10(日) 04:41:30
>>583
つ 猫でもわかる
585デフォルトの名無しさん:2006/09/10(日) 04:56:07
>>584
猫はWinアプなんでいまいちわからんのですよ・・・。
パスを取得するってのはあってますよね?そっからどうやれば??
586デフォルトの名無しさん:2006/09/10(日) 06:00:11
>>583
つ[CImage]

MSDNにサンプルがあるんだけどな。
http://msdn2.microsoft.com/ja-jp/library/ms177536.aspx
587デフォルトの名無しさん:2006/09/10(日) 16:00:13
>>585
マジレスすると、「猫でもわかるプログラミング」という神のページがある。
WinプログラミングのFAQ的疑問は、そこ見れば大抵一発で解決する。
詳しくはググれ。
588デフォルトの名無しさん:2006/09/10(日) 16:55:05
神とは言い過ぎだと思うが、あの量の多さには脱帽するよ。
589デフォルトの名無しさん:2006/09/10(日) 17:07:59
下手するとMSDN引っ張るよりも早かったりするしな。
一人でどんだけ書いてんだよと。
590デフォルトの名無しさん:2006/09/10(日) 18:00:23
猫はWin32API中心だからMFCはあんまり載ってないですよ
>>585は言ってるであろう
591デフォルトの名無しさん:2006/09/11(月) 05:10:30
>>590
そのとおりでございますだ。。。
Win32とかMFCダイアログとかMFCフォームで書き方が初心者にはバラバラに見えますたい。
592デフォルトの名無しさん:2006/09/11(月) 05:25:12
MFCに統一性を求めるのが間違い
593デフォルトの名無しさん:2006/09/11(月) 05:53:05
MFCフォームなんて聞いたことがない
594デフォルトの名無しさん:2006/09/11(月) 23:40:13
なぜVisual C++ 2005 Express Editionには
リソースエディタが無いんですか???
595デフォルトの名無しさん:2006/09/11(月) 23:43:01
.net用だから
596デフォルトの名無しさん:2006/09/12(火) 01:16:25
StandardEdition買いなされ。
安いんだから。
597デフォルトの名無しさん:2006/09/13(水) 12:44:40
質問です。
VS.NET2003のMFCを使っています。
テキストファイルの中身を表示するプログラムを作っているのですが、
エディットボックスに出力する文字列の色を変えることは出来ますか?
出来れば一行ごとに色が変えられるといいなぁ。
598デフォルトの名無しさん:2006/09/13(水) 13:27:35
デバックして、動作チェックをしてたらこのようなエラーが出ました。
Run-Time Check Failure #2 - Stack around the variable 'max_tbl' was corrupted.
(実行時チェックの失敗#2 - 可変的な『max_tbl』のあたりのスタックは、腐敗しました。)
[中断] [継続]

そのまま継続を選択したら、仕様書どおりの結果が返ってきました。

これは何が原因なのでしょうか?

599デフォルトの名無しさん:2006/09/13(水) 13:44:38
原因は様々
600デフォルトの名無しさん:2006/09/13(水) 13:48:22
>>599
すいません、自力で解決できました。
エラー文通り、テーブルの要領が小さすぎて溢れただけでした
601デフォルトの名無しさん:2006/09/13(水) 15:51:41
>>597
リッチテキストボックス rt に、
rt->SelectionColor=Color::Red;
rt->SelectedText="red\n";
rt->SelectionColor=Color::Blue;
rt->SelectedText="blue\n";
でどうでしょ?
602デフォルトの名無しさん:2006/09/13(水) 17:58:53
>>601
なるほど、エディットボックスは色表示出来ないのですね。
ちょっとわかってきました。
ありがとうございました!
603デフォルトの名無しさん:2006/09/13(水) 19:08:56
Visual C++ 2005 では
double と long double は同精度なのですか?
80 bit 精度はコプロセッサでも SSE でも
サポートされてないから、ってことでしょうか?
604デフォルトの名無しさん:2006/09/13(水) 19:45:26
意味不明
605デフォルトの名無しさん:2006/09/13(水) 19:46:33
インテルに聞けばいいんじゃまいか
606デフォルトの名無しさん:2006/09/13(水) 19:50:21
>>604 VC++6 あたりでは
double = 64bit精度
long double = 80bit精度
だったような記憶があったもので。
607デフォルトの名無しさん:2006/09/13(水) 19:53:37
雑誌かなんか見たうろ覚えの知識で
店員に変な質問して得意がってるやつとか
608デフォルトの名無しさん:2006/09/13(水) 20:16:17
>603>606
確かに今のVC++では、doubleもlong doubleもsizeofの結果は同じだ。
だが、どちらにしてもFPUレジスタは80bitあるので、
最適化されれば演算の中間結果は80bitで保持されるようにはなる。
(もちろんSSEなどを使うようにしていない場合だ)
609デフォルトの名無しさん:2006/09/14(木) 01:43:42
SSEだと乗算内部何ビットだっけ?
610デフォルトの名無しさん:2006/09/14(木) 02:00:33
32 or 64
611デフォルトの名無しさん:2006/09/14(木) 02:03:10
ニュートンラフソン法だっけ?
とか使わないで素のままだと、精度がとんでもないことになるのを思い出した。
612デフォルトの名無しさん:2006/09/14(木) 09:45:16
TextReader^ tr = gcnew StreamReader("test.txt");



StreamReader^ sr = gcnew StreamReader("test.txt");

って何が違うの?

613デフォルトの名無しさん:2006/09/14(木) 10:09:09
あと、
while ( (s = sr->ReadLine()) != null ){
ってかくと
error C2065: 'null' : 定義されていない識別子です。
って出るんですが、nullって無いの?

614デフォルトの名無しさん:2006/09/14(木) 10:12:51
>>613
nullptr
615デフォルトの名無しさん:2006/09/14(木) 12:11:15
ぬるぽ
616デフォルトの名無しさん:2006/09/14(木) 14:26:18
>>612
ただ使う分には両者特に違いはない。

StreamReaderはTextReaderから派生しているので、
前者のようにStreamReaderのオブジェクトをTextReaderとして扱うことができる。

TextReaderから派生したクラスはほかにもあるので、
関数の仮引数には、TextReaderにするほうが、関数の使える幅が広がって嬉しいことがあるかもしれない。
617デフォルトの名無しさん:2006/09/14(木) 14:39:38
2005ってフレームワークはMFCじゃなくなったの?
618デフォルトの名無しさん:2006/09/14(木) 14:40:52
すみません。超初心者です。
この度、VC6からVC2005に変えて勉強しています。
質問ですが、VC2005はCreateWindow()は使えないのでしょうか?
また、文字列を引数とする関数全てに
「LPCWSTRに変換できません」
というエラーになってしまいます。(MessageBox()など)
LPCWSTRでキャストすれば通るのですが、文字列指定する関数には
毎回LPCWSTRでキャストしないといけないのでしょうか?
低レベルな質問で申し訳ないですが、よろしくお願いします。
619デフォルトの名無しさん:2006/09/14(木) 14:52:02
CreateWindow()は環境により使える。
LPCWSTRな文字列ならキャストいらない。
LPCWSTRじゃない文字列をキャストしてもLPCWSTRにはならない。
620デフォルトの名無しさん:2006/09/14(木) 15:01:07
>>619
レスありがとうございます。
更に質問なのですが、

>CreateWindow()は環境により使える。
CreateWindowEx()で対処で問題ないですか?

>LPCWSTRな文字列ならキャストいらない。
MessageBox( hDlg, "aaa", "aaa", MB_OK );
だとLPCWSTRに変換できないと言われ、
MessageBox( hDlg, (LPCWSTR)"aaa", (LPCWSTR)"aaa", MB_OK );
にしたら、通ってしまいました。
私はもっと根本的なミスをしているのでしょうか?
621デフォルトの名無しさん:2006/09/14(木) 15:07:40
すみません。解決しました。
プロジェクト->プロパティ->構成プロパティ->全般 の中にある
文字セットを[Unicode 文字セットを使用する]から[マルチバイト文字セットを使用する]
に変更で、いつもどおり文字列を使えるようになりました。
お騒がせしました。
622デフォルトの名無しさん:2006/09/14(木) 15:09:16
CreateWindowはWindowsネイティブAPIだから、externすれば使えるはず
どっかで定義を用意してあるので6.0ではwindows.hにあるが消されたのか?
LPCWSTRのLPCとはポインタを表す表記でWSTRはユニコードを表す表記です
つまりユニコード文字のポインタという意味です
ソースファイルがSJISなら"aaa"はSJISなのでそのまま渡すとエラーになります
SJIS終端コードが\0なのに対しユニコードの終端コードが\0\0だからです
ていうかユニコードしか扱えなくなったのか?
623デフォルトの名無しさん:2006/09/14(木) 15:13:46
>>622
デフォルト設定が多分ユニコードしか使えない設定になっていたと思います。
ここみたら、私と同じような質問をしている人がいたので、試してみたら出来ました。
ttp://oshiete.nikkeibp.co.jp/kotaeru.php3?qid=2236318

>LPCWSTRのLPCとはポインタを表す表記でWSTRはユニコードを表す表記です
つまりユニコード文字のポインタという意味です
なるほど。ありがとうございます。とても助かります。
624デフォルトの名無しさん:2006/09/14(木) 15:36:01
変数 f_stockに前回入力した数値を入力して
今回の数値と比較して、一致すればf_flgに1を入れ、一致しなければ0を入れるサンプルを作っているのですが
更新するたびにf_stockに前回入力した数値が入らず、0が入ります。
どうしたら、更新しても変数の内容を変えないようにできるのでしょうか?
625デフォルトの名無しさん:2006/09/14(木) 15:43:13
static 変数にするのは邪道かな?
626デフォルトの名無しさん:2006/09/14(木) 16:33:23
>>625

staticだと更新は行けたけど、終了してたら変数は0になります。
終了しても変数を初期化したくないんですが無理なんでしょうか?
627デフォルトの名無しさん:2006/09/14(木) 16:44:26
小出し野郎にはレスしない方がいいよ
628デフォルトの名無しさん:2006/09/14(木) 16:48:16
神様教えて
c++ってインターフェースってできないんでしょうか、、

class A{
public:
double GetSignal(int i,int j);
}

class B{
public:
double GetSignal(int i,int j);
}

みたいのがあって、どっちも引数でとれる

double GetSignal(??? C){
return C.GetSignal(5,5);
}

みたいな関数を書きたいんですが。。
629デフォルトの名無しさん:2006/09/14(木) 16:51:02
テンプレート
630デフォルトの名無しさん:2006/09/14(木) 16:52:43
>>627
すいません
小出しにするつもりはないんですが、うまいこと説明できないんです。
631デフォルトの名無しさん:2006/09/14(木) 16:55:32
double GetSignal(int i,int j)を持つクラスからAとBを派生させる。
double GetSignal(??? C)の???にはそのクラスを指定。
632デフォルトの名無しさん:2006/09/14(木) 16:57:18
>629
検索してやってみて、でけた!
ありがとう神様
633デフォルトの名無しさん:2006/09/14(木) 16:59:04
>631
ほぉほぉ
それもいいっすね
634デフォルトの名無しさん:2006/09/14(木) 17:03:58
>>616
さんきゅです。
635デフォルトの名無しさん:2006/09/14(木) 17:06:27
>>630
レジストリかini使えと言いたいけど
言っても無駄になる確立が90%以上だな
636デフォルトの名無しさん:2006/09/14(木) 17:08:41
Visual C++ 6.0ではlong long型は使えない?
longよりも大きな数扱える型ない?
符号付きの10^16を扱える整数型なら問題ないんだけど。
637デフォルトの名無しさん:2006/09/14(木) 17:08:45
class C {
virtual double GetSignal(int i,int j) = 0;
};
class A : public C {
 double GetSignal(int i,int j);
};
class B : public C {
 double GetSignal(int i,int j);
};

C* instance[] = {
new A(), new B()
};
instance[0]->GetSignal( i, j );
instance[1]->GetSignal( i, j );
638デフォルトの名無しさん:2006/09/14(木) 17:10:46
>>630
まず自分がどういう処理で何をしたいのか明白にする事をお勧めする。
うまく説明できない = サブルーチン含めて完成系が想像できていない
639デフォルトの名無しさん:2006/09/14(木) 17:12:26
>>636
LONGLONG
LARGE_INTEGER
640639:2006/09/14(木) 17:15:29
__int64
641デフォルトの名無しさん:2006/09/14(木) 17:48:23
>>638

流れですがこのような感じです

登録クラス:
 入力画面で1〜50の通常数字を6個と1〜50の特殊数字1個を入力する
 登録すると、数字を","ごとに区切ってtxtファイルに格納される
 その際、特殊数字を変数に入れる。
 次回入力の祭、通常数字6個と前回格納した特殊数字を比較する
 数字が一致すれば1 一致しなければ0をtxtファイルに立てる (例 02,11,15,17,27,29,26,1
 今回の特殊数字を変数に入れなおす。

解析クラス:
 画面で1-50のエディタを用意して、特殊数字がヒットした回数を表示させる

642デフォルトの名無しさん:2006/09/14(木) 18:22:28
>>639
サンクス!
643デフォルトの名無しさん:2006/09/14(木) 18:38:33
>>641
ロト6の解析プログラムでも作ろうと思ってるのかw

しかし意味わからんな
人に説明できないソフトが作れるのか?
もっと抽象的に話をするか、もっと具体的に話しないと
変数なんて言葉が出てくると訳わからなくなるぞ
644デフォルトの名無しさん:2006/09/14(木) 18:46:40
>>643

抽象的に言うと、>>641の比較用の特殊数字をプログラムを終了しても残す方法を教えていただきたい。
645デフォルトの名無しさん:2006/09/14(木) 18:54:43
メモリの内容をセーブ(ゲームなんかと同じ)
646デフォルトの名無しさん:2006/09/14(木) 18:56:19
紙テープついてないの?
あれに穴あけるんだよ
647デフォルトの名無しさん:2006/09/14(木) 19:00:34
>>644
writeprivateprofileint
getprivateprofilestring
これでググレばいいよ
648デフォルトの名無しさん:2006/09/14(木) 19:01:36
間違った
writeprivateprofilestring
getprivateprofilestring
649デフォルトの名無しさん:2006/09/14(木) 19:02:21
>>628
JavaやC#のようなインターフェースを作りたいなら631方式が一番しっくり当てはまる。
???のクラスをインターフェースに見立て、メンバ関数は全て純粋仮想関数とするわけだ。
650デフォルトの名無しさん:2006/09/14(木) 19:10:46
VC++2005 Express Editionで、さっき>>2の状況になったんだが、
なる直前に追加した行を削除したらなおった。

バグ?
651デフォルトの名無しさん:2006/09/14(木) 20:31:02
>>2 に理由書いてあるだろ
652デフォルトの名無しさん:2006/09/15(金) 00:15:12
>>641
特殊数字がうんたらかんたらじゃなくて、要は作成したツールに入力した値を
ツール再起動しても保持する方法を知りたいだけだろ?
だったら、>>635>>645が既に答えを教えてくれている。
iniを使いたければ、>>648の言うこと聞いた方がいい。
>>645の言うとおりゲームのセーブデータみたいにバイナリファイルを落とすのも手。
後は起動時に毎回落としたファイルを読み込めばおk。

君の場合レジストリは使わない方がいい。

653デフォルトの名無しさん:2006/09/15(金) 09:25:35
>>648
ぐぐって調べます。ありがとうございます

>>652
レジストリはよく分からないのでiniを使ってみます
654デフォルトの名無しさん:2006/09/15(金) 13:58:48
>>641です

現在 ttp://www.alpha-net.ne.jp/users2/uk413/vc/VCT_INI.html のHPでiniのサンプルを使ったのですが
iniを読込めません。

そのままコピーしたのがいけないのでしょうか?
655デフォルトの名無しさん:2006/09/15(金) 14:23:07
>>651
(゚д゚)ハァ?
656デフォルトの名無しさん:2006/09/15(金) 15:58:22
>>654
超初心者スレッドだから、大サービスで回答するけど
その書き込みじゃ誰も回答なんてくれないぞ
どう動かないのか?読み込めないということは書き込めているのか?
とか具体的な症状を書かないと
だいたい、648が関数名まで指定してググレと書いてあるのに
なぜ別の関数を使ってるんだよ
MSDNでCWinApp::WriteProfileStringの項目調べたのか?
MSDNでさえ、日本語版は疑ってかかれというご時世
HPに書かれていることを完全に鵜呑みにするのはダメ
657デフォルトの名無しさん:2006/09/15(金) 16:54:13
>>656
大サービス感謝です。

MSDNは見てたんですが
 CWinApp::WriteProfileInt

 CString strSection = "My Section";      
CString strStringItem = "My String Item";
CString strIntItem = "My Int Item";

  ↑これの意味が分からず、色々ググってあのHPにたどり着いたんです。

CWinApp* pApp = AfxGetApp();

pApp->WriteProfileString(strSection, strStringItem, "test");

CString strValue;
strValue = pApp->GetProfileString(strSection, strStringItem);
ASSERT(strValue == "test");

pApp->WriteProfileInt(strSection, strIntItem, 1234);
int nValue;
nValue = pApp->GetProfileInt(strSection, strIntItem, 0);
ASSERT(nValue == 1234);
 
 上の例を実行すると
 [テスト][テスト]
 [1234]      になるのですか?
 
658デフォルトの名無しさん:2006/09/15(金) 16:59:01
シラネーヨ
ヴォケ
659デフォルトの名無しさん:2006/09/15(金) 17:08:20
メモリーリーク検出についての質問なんですが、

ロベールの部屋
プログラマーの友 第八報:メモリリークと crtdbg.h
ttp://www1.kcn.ne.jp/~robe/pf/pf008.html

↑のサイトに書いてあるように行い、new int のような一つのオブジェクトを
作成する場合のメモリーリークの検出はできるようになりました。

では、new int[10] のように配列を取得する場合は
どうすればいいのでしょうか?
よろしくお願いします。
660デフォルトの名無しさん:2006/09/15(金) 18:20:50
VC++.NETで、
動的にDISABLEになっているコントロールの色を持ってくることは可能ですか?
661デフォルトの名無しさん:2006/09/15(金) 18:42:37
>>659
デバッグ用に特殊なコード書く必要あるんだったら
そういう機能使う意味ないと思うが
662デフォルトの名無しさん:2006/09/15(金) 19:05:55
(゚д゚)ハァ?
663デフォルトの名無しさん:2006/09/15(金) 19:40:41
>>657
iniファイルってのは、テキスト形式だから、開けば読める
xpでやってるんだったら
c:\windows\
フォルダに、xxx.iniって形で入ってるんだからテキストエディタで開いてみればいい
(xxxはアプリケーション名)
どういう形になってるかわかるだろ
大体、[テスト]って何処から出てきてるんだよw
664add:2006/09/15(金) 21:20:51
すんません。
Visual Studio 6と
Visual Studio 2005 Expressは共存できないのでしょうか?
Visual Studio 6でコンソールアプリが急にコンパイルできなくなったので…
665デフォルトの名無しさん:2006/09/15(金) 21:45:19
>>664
普通に出来とるが何か?
666デフォルトの名無しさん:2006/09/15(金) 21:56:08
共存可能でもデフォルトは
667デフォルトの名無しさん:2006/09/15(金) 22:19:18
>>664
パスの指定どっちが優先になってるかみてる?
とりあえず、コンパイラのバージョンを見てみれば

668デフォルトの名無しさん:2006/09/15(金) 22:41:54
プロジェクト(ソリューション)の拡張子は異なるのでIDE環境で困ることはない。
コマンドプロンプトの場合はどちらも環境変数に登録はしないで、
必要なvcvars32.batを呼び出すようにバッチファイルを用意する。
.cppとかの拡張子の関連付けが気になるなら新しいほうが後からがいいだろう。
669デフォルトの名無しさん:2006/09/15(金) 23:26:11
vs.NET2003をドライブDにインストールしようとしたら
http://vista.xii.jp/img/vi5832930499.jpg
の状態でインストール先ディレクトリが変更できません。
何が原因なんでしょうか?
670デフォルトの名無しさん:2006/09/16(土) 00:30:48
>>669
ひとつ前の画面に戻ってみ?
671デフォルトの名無しさん:2006/09/16(土) 08:55:01
>>657
ini使わないなら、
C言語のファイルの読み込み・書き出し勉強してきな。
672デフォルトの名無しさん:2006/09/16(土) 14:04:16
>>657
君の場合は下手にiniなんて使わないで、fopen()を使った方がいいと思う。
673デフォルトの名無しさん:2006/09/16(土) 14:11:58
iniファイルってデータの順番変わってもよめるから、将来力技が期待できるからオススメ
「5年前のデータを復元してください」て無茶な要望あったりするけど
バイナリ保存は厳しいが、INIのデータ変更パッチとかなら何とかなる
674デフォルトの名無しさん:2006/09/16(土) 14:19:33
>>657>>673の言っている事を本当に理解出来ているなら>>673の方法がイイ。
理解に苦しむようなら。。
675デフォルトの名無しさん:2006/09/16(土) 14:44:10
低レベルな話題だと盛り上がるなw
676デフォルトの名無しさん:2006/09/16(土) 23:17:23
w
677デフォルトの名無しさん:2006/09/17(日) 11:20:44
678デフォルトの名無しさん:2006/09/17(日) 14:05:53
vv
679デフォルトの名無しさん:2006/09/17(日) 19:04:18
貧乏性のせいか、高いお金を払って買ったVS6を未だに使っているのですが、
無料版のVC2005EEを使ったほうがいいでしょうか?
参考書も古いものばかりなので、変更点なども心配です。
680デフォルトの名無しさん:2006/09/17(日) 21:51:55
無料版にはリソースエディタついてないからそのつもりで
681デフォルトの名無しさん:2006/09/17(日) 21:53:02
あ、ドトネトで作るなら使える
682デフォルトの名無しさん:2006/09/17(日) 21:59:02
システムフォルダにコピーするために
VisualC++ランタイムをダウンロードしたいのですが
Vectorのどれをダウンロードすれば良いでしょうか?
683デフォルトの名無しさん:2006/09/17(日) 22:32:04
必要なVer.が判らないと答えられない。
684デフォルトの名無しさん:2006/09/17(日) 23:00:47
Visual C++ 6.0だそうです
685669:2006/09/17(日) 23:29:52
インストール先が未だに変更できません…
やはり
http://vista.xii.jp/img/vi5832930499.jpg
のままです。
前頁に戻ってもプロダクトキーの入力画面でした・・・
686デフォルトの名無しさん:2006/09/18(月) 00:03:45
>>682ですが自己解決しました
687デフォルトの名無しさん:2006/09/18(月) 01:46:30
>>679
俺も、vs6、ずっと使い続けてきたが、,netでの開発が必要になってvs2005pro買った
proだと、msdn subscriptionつけても15万程度(vsだけだと12万位)なので、そんなに高くない
vcだけだったら正直vc6のままでもいいかも・・・って感想だけど、c#は思った以上に良い言語だね
参考書の件だけど
使ってる言語が何かによるけど、vbだったらvb6までの参考書はほとんど役に立たないと思う
違う言語として考えたほうがとっつきやすい
vcだったら、cwとかなくなったので最初は戸惑うけどmfcとかはほとんど違いはないから問題ないと思う
688デフォルトの名無しさん:2006/09/18(月) 04:18:39
VC++6.0を使っています。
プログラムを起動中に指定したフォルダの中のファイルが更新されたかどうかを判断するMFCかAPIはありますでしょうか?
689デフォルトの名無しさん:2006/09/18(月) 07:43:14
FindFirstChangeNotification
690デフォルトの名無しさん:2006/09/18(月) 13:41:24
初歩的な質問ですみません。
VC2006.net を使用しています。
クラス内から、アプリ側の関数を呼び出したいので、
アプリ側から関数を登録するようにしました。
以下の記述でコンパイルエラーが出てしまい解決がわかりません。
(続く)
691デフォルトの名無しさん:2006/09/18(月) 13:42:32
-----アプリ側-----
[ヘッダファイル]
class CDlgAAA : public CDialog
{
public:
bool CDlgAAA::TourokuFunk(int n);
};
[ソースファイル]
bool CDlgAAA::TourokuFunk(int n)
{
if(…略…)return true;
elsereturn false;
}
アプリ内の関数にて
CSubClassZZZ* pKKK;
pKKK->SetAPFunk( TourokuFunk ); // @

(続く)
692デフォルトの名無しさん:2006/09/18(月) 13:43:46
-----クラス側-----
[ヘッダファイル]
class CSubClassZZZ : public CListCtrl
{
private:
bool(* lpfnAPFunk)(int n);
public:
voidSetAPFunk( bool (*lpfn)(int n) );
}
[ソースファイル]
voidCSubClassZZZ::SetAPFunk( bool (* lpfn)(int n) )
{
lpfnAPFunk = lpfn;
return;
}
クラス内のメンバ関数にて
(*lpfnAPFunk)(i) ;
@でエラーが出ます。
「1番目の引数を'bool(int)'から'bool (__cdecl *)(int)'に変換できません。」

どうしたら良いですか?
693デフォルトの名無しさん:2006/09/18(月) 14:15:10
>>691
クラスの非静的メンバ関数は、thisが存在するため、通常の関数とは扱いが異なる。
まあメンバへのポインタでググれ。

手っ取り早く解決するにはBoost使え。
こんな感じ。
#include <boost/function.hpp>
class CSubClassZZZ
{
public:
    typedef boost::function<bool (int)> APFuncType;
    void SetAPFunk(const APFuncType& fn);
private:
    APFuncType fnAPFunk;
};

void CSubClassZZZ::SetAPFunk(const APFuncType& fn)
{
    fnAPFunk = fn;
}
そんでもってこう使う。<boost/bind.hpp>のインクルードが必要。
CSubClassZZZ* pKKK; 
pKKK->SetAPFunk(boost::bind(&CDlgAAA::TourokuFunk, this, _1));
CDlgAAAの中でなければ当然thisを何かに書き換えろ。
CDlgAAAへのポインタでも参照でも受け付けてくれる。

静的メンバ関数や非メンバ関数は、関数へのポインタのように、
そのままboost::functionへ初期化や代入ができる。
694デフォルトの名無しさん:2006/09/18(月) 14:33:22
リストコントロールのコールバックかな?
695デフォルトの名無しさん:2006/09/18(月) 15:23:37
DLLであると同時に実行ファイル形式(コマンドラインなりエクスプローラなりから
単独実行できる)でもあるようなDLLって作れる?
可能ならやり方おせーて
696デフォルトの名無しさん:2006/09/18(月) 17:03:57
exeからエクスポートすればいいじゃん。
697デフォルトの名無しさん:2006/09/18(月) 17:56:30
すみません.教えてください.

JoyStickを4つ使用するプログラムを書いているのですが,
JoySetCapture関数を使って2つまで認識させることができたのですが,
3つめ,4つめはキャプチャに失敗してしまいます.

JOYSTICKIDは1と2しか定義されていないようですし,
これは3つ以上は使えないということでしょうか?
698デフォルトの名無しさん:2006/09/18(月) 18:26:00
>>697
なんか、2個しか出来なさそうな雰囲気だね
DirectInputとか使ってみたら
699デフォルトの名無しさん:2006/09/18(月) 18:27:02
>>696
その場合DllMainはどうなるの?書いておかなきゃだめ?
700デフォルトの名無しさん:2006/09/18(月) 18:30:52
>>698
ありがとう
DirectInputの方向で頑張ってみます
701デフォルトの名無しさん:2006/09/18(月) 18:37:29
すみません教えてください。
VC2005で、リソースエディタでダイアログを作ったのですが、どのように呼べば良いですか?
VC6の頃は、リソースエディタで作ったら、リソースヘッダを自動で作成してくれたのですが、2005では作成してくれません。

呼び出しは
DialogBox( hInst, MAKEINTRESOURCE( IDD_DIALOG ), NULL, (DLGPROC)DlgProc );
で呼び出していますが、呼び出しも間違っていたら、指摘してもらえると助かります。
702デフォルトの名無しさん:2006/09/18(月) 18:43:29
DLGPROCのキャストはわざわざする意味がないと思わないのか。
703デフォルトの名無しさん:2006/09/18(月) 18:46:09
なんとなくです。。呼び出しはそれで呼び出せると思うので、ヘッダの作成方法をお願いします。
704デフォルトの名無しさん:2006/09/18(月) 18:53:08
要らんものは消せ。
それはともかく2005でもヘッダは作られているはずだと思うが。
705デフォルトの名無しさん:2006/09/18(月) 18:57:37
>要らんものは消せ。
了解です。

>それはともかく2005でもヘッダは作られているはずだと思うが。
マジですか?!う〜ん。。今確認しても出来ていない。。
でも自動で作成されると分かったので、色々いじってみます。ありがとうございました。
706デフォルトの名無しさん:2006/09/18(月) 19:21:04
ども705です。
無事解決しました。ありがとうございます。

【原因】
ファイル→新規作成→ファイル→VisuialC++→リソーステンプレートファイル(rct)
で作成。

【解決】
プロジェクト→新しい項目の追加→リソースファイル(rc)
で作成。

拡張子がrctなので、おかしいとは思っていました。。
>>704さんありがとうございました。
707デフォルトの名無しさん:2006/09/18(月) 22:02:21
691です。

>693
ありがとうございます。解決しました。

>694
リストコントロール?なんだろ?
708デフォルトの名無しさん:2006/09/19(火) 01:36:58
質問させてください。
この度PC上で起きるイベント(作業ウィンドウの変更やウェブページの移動等)を記録するプログラムを作る事になりました。
ネット上等を調べてどうやらSetWindowsHookExという関数を使う事は分かったのですが、具体的なコードの書き方(例題等)が分かりません。
どこか詳しく述べているサイト等を知っている方が居ましたら教えてください。

流れ的には、作業ウィンドウ変更→プログラムが感知(フック)→その内容をテキストに書き込み、という感じにしたいです。
よろしくお願いします。
709デフォルトの名無しさん:2006/09/19(火) 01:52:22
一刻も早くネカフェに設置したいんです。よろしくお願いします。
710デフォルトの名無しさん:2006/09/19(火) 05:02:06
>>708 なんで専用のソフトウェア導入しないの?
ウェブページの移動の記録はできなくてもいいの?
711デフォルトの名無しさん:2006/09/19(火) 13:54:15
碌な事に使われない予感。
712デフォルトの名無しさん:2006/09/19(火) 15:48:40
犯罪者はけん
713デフォルトの名無しさん:2006/09/19(火) 17:36:46
VC++2005ExpresEditionで、

殆どCなwin32コンソールアプリ

void main(){
printf("hell,world");
}
をビルドしてできたexeを配布するには
どうすりゃいいですか?
.NETFrameWorks2をインストールしたマシンならOKでしょうか?
714デフォルトの名無しさん:2006/09/19(火) 17:43:05
Visual C++ 2005 Express Editionを使っているのですが
何らかのDLLをLoadLibraryし、何らかの関数のアドレスをGetProcAddressして、その関数を実行します。
関数はちゃんと実行できるのですが、main関数を抜けると(return 0;すると)プログラムの外でアクセス違反が発生します。

gccで同じコードをコンパイルして比較すると、gccではこのような事は起こりません。
どうすればいいですか('A`)

ExitProcessならクラッシュしないので、一応の回避策として今は
#if (_MSC_VER >= 1300)
ExitProcess(0);
#else
return 0;
#endif
こんなことをしていますが…
715デフォルトの名無しさん:2006/09/19(火) 18:15:58
>>713
Win32プロジェクトで作れば、.NET Frameworkは要らない。
せいぜいランタイムを動的リンクにしていればそれが要るだけ。
716デフォルトの名無しさん:2006/09/19(火) 18:20:25
>>714
ExitProcessで問題ないならそれでいいじゃん
717デフォルトの名無しさん:2006/09/19(火) 18:49:26
>>715
>せいぜいランタイムを動的リンクにしていればそれが要るだけ。
その場合の再配布モジュールはこっち vcredist_x86
.NET Frameworkでもmsvcr80.dllだけはインストールされたりするので誤解が多い。
718713:2006/09/19(火) 20:22:44
>>715
>>717
デフォルトの状態から、
プロパティ/Release/構成プロパティ/全般/MFCの使用=スタティック ライブラリで MFC を使用する
とすると、なんかダイジョウブそうなんですが、どうでしょうか?
転がっていた、NT4サーバーに入れたら動いたんですが。

719デフォルトの名無しさん:2006/09/19(火) 20:35:14
>>718
コード生成のランタイムライブラリも関係する。
まあ何もいじっていなければ静的リンクするほうになっているはずだけど。
720デフォルトの名無しさん:2006/09/19(火) 20:39:17
>>718
これだけあれば十分かなぁ。
構成プロパティ>全般
スタッティックライブラリでMFCを使用する(MFCを使う場合)
ATLを静的にリンク(ATLを使う場合)
構成プロパティ>C/C++>コード生成
マルチスレッド(/MT)

.net framework2.0のインストールは何で時間がかかるのか〜と思ってたら、
クラスライブラリ全体にngen走らせてるのね。そらかかるわ。
721デフォルトの名無しさん:2006/09/19(火) 21:11:59
ランタイムだけとはいえライブラリをビルドするのと同等だからなぁ。
まあ自動でやってくれるんだからPortageみたいなもんか。
722デフォルトの名無しさん:2006/09/19(火) 23:02:11
VC71 を使っています。
静的ライブラリ Lib1 で Func0.cpp と Func1.cpp というファイルがあります。
Func0.cpp では Func0 を実装しています。
Func1.cpp では Func1 を実装しています。
Func0 は Func1 からしか使用されないので
本来 static なのですが、別ファイルにしているので、static にしていません。
このとき、静的ライブラリ Lib1 をビルドすると、Func0 もエクスポートされてしまいます。
ここまでは問題ありません。

次に、同じような静的ライブラリ Lib2 を作成し、
Func0.cpp では Func0 を実装し
Func2.cpp では Func2 を実装したとします。
このとき、静的ライブラリ Lib2 をビルドすると、Func0 もエクスポートされてしまいます。
ここでもまだ問題はありません。

Test1.exe プログラムで、Lib1 の Func1 と Lib2 の Func2 を使用したいとき、
Lib1.lib と Lib2.lib をリンクすると、Func0 が二重定義されているという
リンカ エラーが発生します。
このエラーを回避するには、どうしたらよいでしょうか。
Func0 を別ファイルに実装するという設計は変えたくない。
723デフォルトの名無しさん:2006/09/19(火) 23:08:53
Lib1とLib2のFunc0の中身は似ているか?
似ているなら合体して1つにしてしまえ。似たようなものがいくつもあるのは良くない兆候。

そうでなければ、Lib1とLib2の中身をそれぞれ名前空間で閉じ込めたらどうか?
724722:2006/09/19(火) 23:11:29
>>723
> Lib1とLib2のFunc0の中身は似ているか?
いえ、プロトタイプ自体違うものです。

> Lib1とLib2の中身をそれぞれ名前空間で閉じ込めたらどうか?
うーん、実は C++ じゃなくて C を使っているんです。
725デフォルトの名無しさん:2006/09/19(火) 23:54:38
ダイアログを最小化した時に、画面右下のアイコンのところに収まるようにすることは可能でしょうか?
726デフォルトの名無しさん:2006/09/20(水) 00:06:02
func1.cppで、include "func0.cpp"する。もちろん、Func0はstaticにする。
727デフォルトの名無しさん:2006/09/20(水) 00:14:28
>>724
なんでライブラリを分けたいのかな?ひとつにまとめるじゃダメ?
cl /c func0.cpp func1.cpp func2.cpp
lib /out:libx.lib func0.obj func1.obj func2.obj
728デフォルトの名無しさん:2006/09/20(水) 00:16:04
>>727
ああ名前が同じだけで別物なのか。別物なら別の名前をつけるこれが原則。
729デフォルトの名無しさん:2006/09/21(木) 10:42:37
c++ でファイルからバイト数を指定してファイルの内容を読み込むにはどうしたら良いですか
730デフォルトの名無しさん:2006/09/21(木) 10:44:55
freed
731デフォルトの名無しさん:2006/09/21(木) 10:45:48
>>729
istream::read(vhar*str, streamsize count)
732デフォルトの名無しさん:2006/09/21(木) 10:46:09
×vhar
○char
733デフォルトの名無しさん:2006/09/21(木) 10:46:49
ヴェラー
734デフォルトの名無しさん:2006/09/21(木) 10:47:54
言い忘れたけど、ストリームはstd::ios::in | std::ios::binary で openしておく。
735デフォルトの名無しさん:2006/09/21(木) 10:59:41
>>730-734
どうもありがとう
736デフォルトの名無しさん:2006/09/21(木) 18:07:25
LONGLONGとint64はまったく同じものですか?
737デフォルトの名無しさん:2006/09/21(木) 18:43:40
同じ。
__int64をtypedefしてLONGLONGが作られている。
VC7からはC99のlong longも使える。
738デフォルトの名無しさん:2006/09/21(木) 23:07:55
すみません。
bool と BOOL の違いって何ですか?
739デフォルトの名無しさん:2006/09/21(木) 23:26:49
typedef int BOOL
740デフォルトの名無しさん:2006/09/21(木) 23:41:00
そんでもってboolはintなどと同じくC++の組込型。
迷ったらboolにするほうが俺のお勧め。
741デフォルトの名無しさん:2006/09/22(金) 00:39:51
WinAPIとWin32とMFCとSDKとVC++の概念は、

VC++{
・SDK{WinAPI=Win32}
・MFC
}
という感じでしょうか?

中括弧は「含まれる」みたいな意味で。
742デフォルトの名無しさん:2006/09/22(金) 00:47:43
class VC++ {
MFC m_MFC;
};

class MFC {
SDK m_SDK;
};

class SDK{
void API();
};
743デフォルトの名無しさん:2006/09/22(金) 00:58:10
どっちかというとWin32はWindowsそのものを指すのに近いような感じ。
Win32を使うためのインターフェースがWin32API。
だから等号には少々違和感を感じる。
744デフォルトの名無しさん:2006/09/22(金) 01:28:28
>>742
追加で
class VC++
{
745デフォルトの名無しさん:2006/09/22(金) 14:25:18
Windows Update関連の処理の勉強してるんだけど、
Wuapi.hっていうファイルがあって、ファイルの最初に

/* File created by MIDL compiler version 6.00.0347 */
/* Compiler settings for wuapi.idl:
Oicf, W1, Zp8, env=Win32 (32b run)
protocol : dce , ms_ext, c_ext, robust
error checks: allocation ref bounds_check enum stub_data
VC __declspec() decoration level:
__declspec(uuid()), __declspec(selectany), __declspec(novtable)
DECLSPEC_UUID(), MIDL_INTERFACE()
*/
//@@MIDL_FILE_HEADING( )

って書いてあるんだけど、
MIDL(Microsoft IDL)って一体どういう風に使うの?
ググっても、msdnライブラリのヘルプ見ても、よくわからんかった。
wuapi.libってファイルは一応あるんだけど、
自分で新たにwuapi.libを用意する場合、
どっかからソース持ってきて、自分でコンパイルしなきゃだめなのだろうか?
746デフォルトの名無しさん:2006/09/22(金) 14:59:33
>>745
それ位の英文読めよ。
そのWupai.hは、wuapi.idlをそこに書いてあるとおりのオプションでMIDLコンパイラにかけて作られた。
こういう旨が書いてあるだけだろ。

もはやWuapi.hは単なるヘッダなんだからC/C++ソースから普通にインクルードして使ってよい。
747デフォルトの名無しさん:2006/09/22(金) 15:28:47
SDKで組んでいたら、MFCで組んでいる人に鼻で笑われました。
何故ですか?SDKってレベルが低いのでしょうか?
ちなみに私はMFCは勝手にソースに書き込む&専用DLLが必要(exeに組み込むとサイズ喰う)ので
SDKで組んでいます。
748デフォルトの名無しさん:2006/09/22(金) 16:54:17
MFCはソースに書き込まないと思うんだ。
749デフォルトの名無しさん:2006/09/22(金) 17:42:10
>>748
あ、言い方悪かったです。
コントロールを作成すると、勝手に記述されてしまうって意味です。
750デフォルトの名無しさん:2006/09/22(金) 17:42:27
ウィザードで自動生成される見えない部分のコードの事を言ってるんじゃね?
751デフォルトの名無しさん:2006/09/22(金) 17:55:21
それです
752デフォルトの名無しさん:2006/09/22(金) 19:45:56
それはウィザードを使わなければいいだけじゃないのかな?
MFCを使うかどうかと直接の関係はないと思うんだ。
753745:2006/09/22(金) 20:49:07
>>745 ですが、質問の仕方が悪かったかもしれない。
知りたいのは、
(1)MIDL compiler は、どういう風にしたら使うことができるのか?
(環境はVC6.0です。)

(2)wuapi.libやWuapi.hを自分で入手したい場合、
どこかのサイトでダウンロードできるのか?
(ファイル自体は持ってるし、使用方法も分かっているが
その出所が知りたい)

よろしくお願いします。
754デフォルトの名無しさん:2006/09/22(金) 20:57:49
>>747
いっそ、WTLで組んでさらに笑われてみるとかw
いや、俺はWTL好きだけどね
専用DLLが無いので軽量だし
つーか、MFCだって別にウィザード使わなくたって組めるけどな
755デフォルトの名無しさん:2006/09/22(金) 21:30:52
>>747
確実に言えることは、そんなことで笑うようなやつのレベルが低いということ。
756デフォルトの名無しさん:2006/09/22(金) 21:36:21
>>753
コマンドプロンプトからmidlというコマンド。

wuapi.libもwuapi.hも基本はPlatform SDKに入っているものを使うのが原則だが、
libのほうは、DLLからインポートライブラリを作るツールがあるし、
wuapi.hはmidlでwuapi.idlから作れる。そのwuapi.idlは、Platform SDKにしか入っていないんだけどな。
757デフォルトの名無しさん:2006/09/22(金) 21:55:38
>>755
まったくだな、そんなやつ無視すりゃいいよ
ただ、745も
MFCが使えるけど、明確な理由で使っていないというならいいが
MFCくらいは出来るようにしといたほうがいいけどな
758745:2006/09/22(金) 22:45:53
>>756
おお〜!レスどうもです!
midlコマンドは、今日やってみましたが、
「そのコマンドは認識されていません」でした。
msdnヘルプに書いてある設定画面にいかないので
そこで止めて、web検索に走ってしまいました。

.hと.libファイルは、psdkのCD-ROMがあるので、
それを調べるかインスコフォルダ調べれば良さそうですか。
問題解決まで、もう少しのような気がします。
とりあえずサンクスです。
759デフォルトの名無しさん:2006/09/23(土) 10:01:53
Visual Studio 2005 StandardのC++で、
.NETのクラスライブラリは使わないでプログラム作ってるんだが
出来上がったプログラムは.NET Frameworkなくても動く?
760デフォルトの名無しさん:2006/09/23(土) 10:34:55
.NETのプロジェクトを選ばなければいらない。
761デフォルトの名無しさん:2006/09/23(土) 10:38:00
VC++8 のランタイムはいるけどな。
.NET Framework 2.0 インスコすると勝手に
VC++8 のランタイムも入るから、見た目には
.NET Framework 2.0 が無いと動かないように錯覚するので注意。
762デフォルトの名無しさん:2006/09/23(土) 10:57:07
>>760-761
そういうことだったのか。
サンクス。
763デフォルトの名無しさん:2006/09/23(土) 18:00:07
char a = '5'となっているものをint b = 5に変換したいのですが、どうしたらよいのでしょうか
764(^-^) ◆MONSOON/qo :2006/09/23(土) 18:09:20
>>763
編集→置換
で全て置換
765デフォルトの名無しさん:2006/09/23(土) 18:11:15
自己解決しました。atoi関数を使えばよかったのですね。

>>764
・・・
766(^-^) ◆MONSOON/qo :2006/09/23(土) 18:23:46
>>765
5 = '5' - 48だよ
767デフォルトの名無しさん:2006/09/23(土) 18:26:46
>>766
48なんてマジックナンバー使うな。せめて'0'と書け。
768デフォルトの名無しさん:2006/09/23(土) 18:33:28
すみません。教えてください。
今あるソースコードをコンパイラー(VC++ 6.0)でコンパイルしようとしています。
コマンドプロンプトからの実行を行いたいのですが、
エラーとして、
 nmakeはバッジファイルとして認識されません
と表示されます。
どうもVCVARS32という名前のバッチファイルの環境変数を設定しないといけないみたいのですが、
全く何をどう設定したらいいものか分かりません。
どうかご教示をお願いします。
769デフォルトの名無しさん:2006/09/23(土) 19:01:49
設定は必要ない
実行するだけ
770デフォルトの名無しさん:2006/09/23(土) 22:47:26
誘導されたので、こちらで質問します

環境
  OS WinXP
  コンパイラ Visual C++

if文を用いたプログラムを作りたいので質問します
最初に[F5]を押し、もしパケットの受信(なんらかの通信)があったなら、5秒後にまた[F5]を押し
もし、パケットの受信がなければ、そこでプログラム停止 

というプログラムを作りたいのですが、全くわかりません ある程度のコマンドを表記してもらえれば後は自分で独学するので
使うコマンドだけ教えてくれませんか?

2ちゃんねるの実況などのオートリロードに役立てたいのです(Janeですと、制限があるので…)

771デフォルトの名無しさん:2006/09/23(土) 22:54:56
何に対してF5の押下メッセージを投げるのか?

パケット云々言ってるが、更新ボタンを押せば、
何かしらパケットのやりとりはするだろうだから、
そんなものチェックしても意味無しと思われ。
772デフォルトの名無しさん:2006/09/23(土) 22:57:50
コマンドなんてない
773デフォルトの名無しさん:2006/09/23(土) 23:00:15
>>771
では、パケットが〜以上の場合、〜未満の場合
って分けれる事はできますか?
774デフォルトの名無しさん:2006/09/23(土) 23:01:14
>>772
では、とりあえず、[F5]を何秒か語とに押すプログラムは作れますか?
775(^-^) ◆MONSOON/qo :2006/09/23(土) 23:05:24
776デフォルトの名無しさん:2006/09/23(土) 23:07:43
>>775
できれば、一から自作してみたかったのですが、とりあえずこれ使わせてもらいます
どうもありがとうございます
777デフォルトの名無しさん:2006/09/23(土) 23:48:58
test
778768:2006/09/24(日) 00:23:55
>>769
えーと、設定しないと実行出来ないのですが・・・
779デフォルトの名無しさん:2006/09/24(日) 00:49:03
逆だ。VCVARS32を実行すると、設定される。
何が設定されるかというと、nmakeその他のコマンドを実行できるようにするために環境変数を設定する。
780768:2006/09/24(日) 01:19:47
すいません。混乱してきました・・・
その、nmakeのコマンドを実行できるようにするための設定(環境変数の設定)は
どのようにすればいいのでしょうか??
781デフォルトの名無しさん:2006/09/24(日) 01:36:06
単にVCVARS32.BATを実行するだけ。
782768:2006/09/24(日) 01:49:35
ようやく理解しました。。。ありがとうございます。
VCVARS32.BATをクリックすることで環境変数が設定される!
ってことですね!?
しかし、やっぱり、nmakeは・・・認識されていません。
ってなるのですが、他に考えられる原因ってあるのでしょうか??
783デフォルトの名無しさん:2006/09/24(日) 02:01:06
クリック→x
設定はひとつのcmd.exeの中のみ有効。画面内で全部実行する。
784768:2006/09/24(日) 02:09:51
どうもありがとうございした。
解決しました。
785デフォルトの名無しさん:2006/09/25(月) 11:40:56
MBCS か UNICODE かを決めるための
構成プロパティ→全般→プロジェクトの規定値→文字セット
って、プロパティシートでは設定することができませんよね?
特に指定しない限り UNICODE にしたいのですが、どうすればいいでしょうか?
786デフォルトの名無しさん:2006/09/25(月) 11:52:28
VC++.Netでの画像取得の質問。

CWnd*myWnd= (CWnd*)GetDlgItem(IDC_FIGURE);
CDC*myDC1= myWnd->GetDC();

myDC1->Ellipse(点を書く場所);

これでIDC_FIGURE内に点を描いているのですが、これをメモリ上(or BMPなどの画像フォーマット)で保存するのは可能ですか?
よろしくお願いします。
787デフォルトの名無しさん:2006/09/25(月) 12:22:44
叶姉妹
788デフォルトの名無しさん:2006/09/25(月) 12:39:58
指定したbmpファイルをリソースに埋め込まず
Cbitmapに読み込むにはどうしたらいいでしょうか。
789デフォルトの名無しさん:2006/09/25(月) 12:41:16
DCとは相手がメモリだろうがデバイスだろうがその違いを吸収するラッパーのようなものです
CWnd に関連図けられたDCに操作を行えばCWndを表示しているデバイスに操作が行われます
ビットマップに描画してやりたければビットマップをターゲットにしたDCを作ればいいんです
ビットマップはビット深度などでいろいろな種類があってその辺はDCでもカバーできないので
指定しないといけません
一番簡単な方法はCWnd互換のビット深度を持ったビットマップを生成する方法です
CreateCompatibleBitmap及びCreateCompatibleDCというAPIがあります
普通はビットマップを保存するなどの必要がある場合は二度手間になるのでビットマップだけに描画して
BitBltを使ってそれぞれのデータをコピーして画面に出すという方法が一般的です
このコピーの作業もDCがデバイスの差異を吸収して一発で出来ます
790デフォルトの名無しさん:2006/09/25(月) 12:42:16
>>788
ビットマップを自前で解析してメモリに割り当てないといけません
サードパーティのライブラリを使ったほうがいいです
791788:2006/09/25(月) 12:46:41
>>790
そうですか。C++やめてC#に移ります。
792デフォルトの名無しさん:2006/09/25(月) 14:00:45
>>788
Win APIのLoadImageで読み込み、
CBitmap::FromHandleでCBitmapのオブジェクトを作ったらどうか。
793デフォルトの名無しさん:2006/09/25(月) 14:27:19
Attachした方が管理しやすいかも。
788=790=791の自演だろうけど。
794734:2006/09/25(月) 20:16:17
DirectXなどのライブラリで引数にfilename文字列を取ってファイルを
読み込む関数があると思いますが、例えばa.bmp b.bmp c.bmpという3つ
のファイルをdata.datというファイルにまとめた場合、
どうやってそのライブラリでa.bmp b.bmp c.bmpを読み込めばよいのでしょうか?

data.datを自分でメモリ上に展開して、ライブラリ側でメモリからロードできる関数を使う
と考えているのですが、そういう関数が無い場合など、他に考えられる方法はありますか?
795デフォルトの名無しさん:2006/09/25(月) 20:36:24
テンポラリに展開して読み込ませる
796デフォルトの名無しさん:2006/09/25(月) 20:36:31
a.bmpやb.bmpのオフセットをdata.datのヘッダに書いとけばいいんじゃね

あとはdata.dat内をシークして読み込めばdata.datをメモリ上に展開する必要ないし
797デフォルトの名無しさん:2006/09/25(月) 20:53:32
>>795-796
レスありがとうございます

>>796
連続で質問で申し訳ないですが、data.dat内をシークして読み込むというは大体どんな感じのコードになるんでしょうか?
798デフォルトの名無しさん:2006/09/25(月) 21:22:35
例えば先頭4byteにファイル数、
その後は16byteのファイル名+4byteのオフセットxN
とか適当にファイルのヘッダ形式を決めておく
例えばb.bmpを読みたい場合、
data.datを先頭から読み込んでファイル数を取得
ファイル数分ループしてファイル名とオフセットを取得
b.bmpを見つけたらオフセットも取得できている筈なんで
そこにfseek
あとは単体のb.bmpと同じ様に読み込む
※オフセットはdata.datの先頭からのオフセットでもいいし、
ヘッダ部を除いたところからの相対オフセットでもいい

..なんか分かり難いな

>メモリからロードできる関数
がない場合>>795
Windowsならファイルマッピングとか使えるかも
799デフォルトの名無しさん:2006/09/25(月) 23:49:52
>>794
>そういう関数が無い場合など、他に考えられる方法はありますか?

無ければ自分で作ればいいじゃん。
800デフォルトの名無しさん:2006/09/25(月) 23:57:59
ひとつ作っておくと結構重宝するしな。
昔Javaで書いた奴なら出てきたんだが、読むかい?
ソースが5KBほどあるんで、流石にここに貼り付けるわけにはいかんが。
801デフォルトの名無しさん:2006/09/26(火) 00:12:02
>>798
>あとは単体のb.bmpと同じ様に読み込む
ここでhoge(char* filename)に渡せるんでしょうか?
どうもイメージがつかめません・・・

>>799
作り方がわからないというか
ファイル処理というものがどうなっているのかわからない

>>800
読んでみたいです
802デフォルトの名無しさん:2006/09/26(火) 00:22:45
>>801
大したもんじゃないけどね。Javaだし。
どこか適当な捨てメアドかアプロダ指定してくれたら、送るよ。
803デフォルトの名無しさん:2006/09/26(火) 00:31:45
>>801
>ファイル処理というものがどうなっているのかわからない

普通のファイル操作と本質は何も変わらんよ?
バイナリで全部読んで、ファイルフォーマットに応じた操作をすればおけ。
bitmapはbit深度によってパレット周りの操作が違ったりして、多少面倒だけど、
画像自体をコードの仕様に合わせれば良し。
804デフォルトの名無しさん:2006/09/26(火) 00:31:55
>>802
ttp://gamdev.org/up/
ここでどうでしょうか?
805デフォルトの名無しさん:2006/09/26(火) 01:38:20
>>803
bmpを例として挙げましたけど
ファイルフォーマットの資料が少ないものや複雑なものの場合
ファイル名を渡すだけでライブラリがオブジェクトを構築してくれるのは楽かなと思ったんです
806デフォルトの名無しさん:2006/09/26(火) 03:47:56
>>804
うpた!7671.zipん中。
こっちは連結器だけだけど、読むのもすぐ作れると思う。
807デフォルトの名無しさん:2006/09/26(火) 04:09:12
それって、tarの再生産?
808デフォルトの名無しさん:2006/09/26(火) 04:20:54
まあ、そうだね。
すっぴんのtarを使う分には問題はないけど、
展開部分のコードをパクって来るわけにもいかないしなー。
ああ見えてtar、ソースだけなら結構でかいし。
tar自体のファイル構造はシンプルだけどさ。
809デフォルトの名無しさん:2006/09/26(火) 04:23:19
つーか、OpenOfficeみたいにzip使うとか。
810デフォルトの名無しさん:2006/09/26(火) 04:25:21
zlibは洗練されたライブラリだと思うが、今は自作してもいいんじゃないかね。
811デフォルトの名無しさん:2006/09/26(火) 11:49:34
スレッドセーフの勉強をしたいと重いMSヘルプにあった一部をコピーして実行
しようとしているのですが、

Delegate void SetTextCallback(String text);

が「無効なトークン 'void' が クラス、構造体またはインターフェイスのメンバ宣言で使用されています。」
とエラーになってしまいます。これはどうしてなのでしょうか?。
812811:2006/09/26(火) 11:56:35
スレ間違えました;;
移動します
813デフォルトの名無しさん:2006/09/26(火) 14:21:39
質問です。

ファイル入力で取得したファイル名(xxx.mid)をCString型の変数fnameに格納し、
次にメニューからMIDIの再生を選択したときに
fnameからファイル名を取り出しMIDI再生ルーチンへ渡したいのですが、
なぜかfnameにはファイル名ではなく、コンストラクタで初期化した値が入っています。

ファイル入力の後、一度fnameに格納されていることは確認済みです。
どのようにすれば正しくファイル名を取り出せるのでしょうか?
814デフォルトの名無しさん:2006/09/26(火) 14:42:56
そのコードをちょっと見せてくれ。
815813:2006/09/26(火) 15:19:08
長いですが、、、

ReadSMF.cpp

// SMFの読み込み
BOOL CReadSMF::ReadSMF(CArchive& ar)
{
BOOLret = FALSE;

CFile* cf;

cf = ar.GetFile();
PutFilename(cf->GetFileName());

〜省略〜

return ret;
}


void CReadSMF::PutFilename(CString fn)
{
CSMFDocm_doc;
m_doc.PutFilename(fn);
};
816813:2006/09/26(火) 15:19:46
続きです。

SMFDoc.cpp

// コンストラクタ
CSMFDoc::CSMFDoc()
{
fname = "";
}
// ファイル名の格納
void CSMFDoc::PutFilename(CString fn)
{
fname = fn;
}

// ファイル名の取得
CString CSMFDoc::GetFilename()
{
return fname;
}

// メニュー【MIDIの再生】
void CSMFDoc::OnPlay()
{
CMainFrame* Frm = new CMainFrame;

CString SmfName = GetFilename();  //ここでファイル名を取得できない。
Frm->MidiPlay(SmfName, TRUE);
}


よろしくお願いします。
817デフォルトの名無しさん:2006/09/26(火) 15:36:02
void CReadSMF::PutFilename(CString fn)
{
CSMFDocm_doc;
m_doc.PutFilename(fn);
};

このメンバ関数が呼ばれた間にしか存在しないから
818デフォルトの名無しさん:2006/09/26(火) 15:39:25
すごい単純なことをそんな長く書かなくてもいいだろうにw
819813:2006/09/26(火) 15:58:30
>>817
ありがとうございます。
fnameはCSMFDocクラス内で定義しているのに
CReadSMF::PutFilenameが呼ばれた間しか存在していないのですか?
では、どうしたらCSMFDoc::OnPlayでファイル名を扱えるようにできますか?
820デフォルトの名無しさん:2006/09/26(火) 16:07:32
CSmfDoc.h

class CSMFDoc
{
public:
CString fname;
OnSelect();
OnPlay();
};

CSmfDoc.cpp

CSMFDoc::OnSelect(){
fname = ファイル選択
}

CSMFDoc::OnPlay(){
CMainFrame* Frm = new CMainFrame;
Frm->MidiPlay(SmfName, TRUE);
}
821813:2006/09/27(水) 17:44:51
>>820
ありがとうございます。
無事に動きました。
822デフォルトの名無しさん:2006/09/27(水) 19:53:58
SDK環境なんですが
スプリッタウィンドウってMFCでしか利用できないんでしょか?
823デフォルトの名無しさん:2006/09/27(水) 20:04:50
ないね
824デフォルトの名無しさん:2006/09/27(水) 22:34:52
WTLもあるでよ。
825564:2006/09/27(水) 23:49:43
VC++.netの初期(2001ごろ)と2003と2005の違い、違いを埋めるための
ノウハウなんかをまとめたサイトってご存知ないですか
手元には2001?のアカデミー版と2005のExpressがありますが
かなり違うみたいで、また図書館で借りた2003準拠の本もまた違うようです。
なお2001はもっぱらC#を使っていました。
826デフォルトの名無しさん:2006/09/28(木) 00:07:30
( ゚д゚)…
827デフォルトの名無しさん:2006/09/28(木) 01:25:10
>>823,824
ありがと
828827:2006/09/28(木) 03:47:23
822=827です
WTLのはCSplitterWndのラッパーのようだったので
結局MFCのライブラリが必要ぽいので断念しました

VCのMFCのフォルダにソースがあったので(afxext.h & WINSPLIT.CPP)
これを見ながら自分で実装することにします
829デフォルトの名無しさん:2006/09/28(木) 08:49:30
C++2005の場合、たとえばフォーム上にボタンを配置してそれが押されたときの
イベントを登録しようとすれば、ボタンをダブルクリックすればそれが登録され
ひながたがソースプログラムに作成されます。ボタンならクリック以外の
イベントを登録しようとは思わないが、たとえばテキストボックスなら
チェンジとかクリックとかいろいろなイベントがあるわけですが、
それを登録するにはどうするのですか。以前のバージョンならクリックして
フォーカスをあわせて右クリックすればできたようですが。
830デフォルトの名無しさん:2006/09/28(木) 08:54:32
>>828
WTLは全くMFCに依存していない。(ATLにはべたべただが)
MFCと同名・似た名前のものもMFC抜きで使える。
831デフォルトの名無しさん:2006/09/28(木) 10:34:36
>>829
プロパティーのとこの雷マーク
832デフォルトの名無しさん:2006/09/28(木) 12:10:18
>>831
できました、ありがとうございます。
833デフォルトの名無しさん:2006/09/28(木) 14:38:27
StreamReader って、C++2005 Express Edition でも使えるんですか
ファイル操作関係で、CStdioFileも駄目なんですよね。
834デフォルトの名無しさん:2006/09/28(木) 15:05:29
StreamReaderは.NET Frameworkの一部だから使える。
CStdioFileはMFCの一部だから使えない。
835デフォルトの名無しさん:2006/09/28(木) 15:14:19
>>833
自己レスですがC#の事を思い出して
using namespace System::IO;
を入れたらコンパイルが通りました。
836デフォルトの名無しさん:2006/09/28(木) 15:15:51
もっとピンポイントにusing System::IO::StreamReader;がいいよ。
837デフォルトの名無しさん:2006/09/28(木) 15:16:22
>>834
入れ違いになりましたが、使えそうです。
C++がどんどんC#に似てきていますね。
838デフォルトの名無しさん:2006/09/28(木) 15:17:54
>>836
またまた入れ違いですが、納得です。
839デフォルトの名無しさん:2006/09/28(木) 15:37:30
それC++じゃないから
840827:2006/09/28(木) 18:18:10
>>830
そうなんですか
うーむ、関数名を見ただけで早とちりしてました
もう少し調べてみます
841デフォルトの名無しさん:2006/09/29(金) 22:20:00
クラステンプレートについて質問です。VC++6を使ってます。
C++の入門書を読んでクラステンプレートを使ってみました。
ヘッダーファイルに全部記述しないとダメみたいですが使用できることがわかりました。
型が違うだけの同じクラスを、沢山作らなくていいので超便利です。
そこで、調子こいて、クラステンプレート内で、こんな感じで
map.insert( pair< int, T* >)( iKey, aaa ) );
とSTLのmapやvectorを使ってみたのですが、そうすると

「typedef 識別子に、クラス メンバ アクセス演算子 (->) を使用しました。」
とかエラーがでてしまいました。

そこで質問です。STLの関数の引数にクラステンプレートのクラスを
指定するのは可能なんですか?
よく考えたらSTLもクラステンプレートだから無理なんですか?
842デフォルトの名無しさん:2006/09/29(金) 22:52:42
>>841
>map.insert( pair< int, T* >)( iKey, aaa ) );

↑の括弧の付け方がおかしいだろ。下のようにしてみたら?
map.insert( pair< int, T* >( iKey, aaa ) );

843デフォルトの名無しさん:2006/09/29(金) 22:57:58
>>841
それmap.insert(pair<int, T*>(iKey, aaa));だと思う。
余計な閉じ括弧が付いている。あと、make_pair便利だよ。

まあそんなんでコンパイルできるようになるとは思えないけどな。
そもそもVC++ 6は、テンプレート周りがだめだめなことで有名。
それどころか現在の標準C++からもだいぶ外れている。

VC++ 8 (2005)がただで使えるからそっちも試してみるといいよ。
844841:2006/09/29(金) 23:08:38
>>842 >>843

本当だ!orz
余計な「)」を取り除いたらコンパイルできました!ありがとうございます。

これからいろいろ勉強しようと思っているので、VC8とか入れてみようと思います。
845デフォルトの名無しさん:2006/09/30(土) 07:29:59
VISUAL C++ 2005 Express Edition で
文字列5000個の配列を作るにはどうすればいいですか。
個数指定なしでは array<String^>^ aName; でコンパイルはいけますが
実行エラーが出るので、サイズが関係していると思い
array<String^>^ aName = gcnew String[5000];
だとコンパイルエラーになります。
846デフォルトの名無しさん:2006/09/30(土) 08:40:35
array<String^>^ aName = gcnew array<String^>(5000);

プログラムの移植(ry - C++/CLI移行ガイド
- マネージ型 - CLR配列の宣言
を参照するといい。
847デフォルトの名無しさん:2006/09/30(土) 09:48:48
>>846
ありがとうございます、コンパイルは通りました。
ご教示の場所はこれから見てみます。
848デフォルトの名無しさん:2006/10/01(日) 03:18:14
フォーカスについて質問です

現在親ウィンドウに子ウィンドウを一つだけ貼り付けています
子ウィンドウでキーボード入力を処理したかったので
SetFocusを使うとキーボード入力を受け付けました
しかし、キーを一つ入力すると、
すぐに親ウィンドウにフォーカスが移動します

特に何もしてないのに勝手に親ウィンドウにフォーカスが移動するのは
なぜなのでしょうか

# MSDN(ウェブ)の検索のコツってあるんですかね
# フォーカスがないとWM_KEYDOWNがこないというのも
# 個人のホームページで見つけるまでわからず。
849848:2006/10/01(日) 03:38:43
すいません勘違いでしたスルーでお願いします
850デフォルトの名無しさん:2006/10/02(月) 03:05:30
レイヤー管理を行うプログラムを作っています.
PhotoShop,Painter,Sai等の様なレイヤーコントロールのGUIを作りた
いと思っているのですが,どのように実装したらよいでしょうか?
リストビューを使って行列表現をしてアイコン画像を表示する方法が
一般的かと思いますが,他に良い方法があったら教えてください?
851デフォルトの名無しさん :2006/10/02(月) 05:14:36
>>850
作ろうという意気込みは立派なもんだ
でも、PhotoShopしかり、あんな値なソフト
を、一朝一夕でつくるのは厳しい。
でも、がんばっちゃえ。
852デフォルトの名無しさん:2006/10/02(月) 17:12:03
すごく簡単なはずの事がわからないです。
Visual C++.net(2002)で画面を閉じてプログラムを終了するのって何ですか。
C++2005やC#ではthis.Close();
なのですが
853デフォルトの名無しさん:2006/10/02(月) 17:22:50
自己レスですが
this->EndDialog(0);
でうまくいったようですが、これでいいのですか。
854デフォルトの名無しさん:2006/10/02(月) 17:28:32
さあ
855デフォルトの名無しさん:2006/10/02(月) 17:39:17
しるかよ
856デフォルトの名無しさん:2006/10/03(火) 00:42:14
ここは初心者に過酷な初心者スレですね

>>853
MFCのダイアログを閉じるとかなら、まあそれでも。
外から閉じたい時の常道は、WM_CLOSEをSendMessageする、
CloseWindowを呼ぶ等。
857デフォルトの名無しさん:2006/10/03(火) 06:07:04
で?
結局これでいいのですか?
858デフォルトの名無しさん:2006/10/03(火) 09:37:21
>>856
852です。
先に
this->CloseWindow();
をやったけど最小化するだけどした。
メニューもなく×ボタンも無いのでデバッグのデバッグの停止で終了させると
いう動作になりました。
859デフォルトの名無しさん:2006/10/03(火) 10:12:59
this->Close();
860デフォルトの名無しさん:2006/10/03(火) 10:16:43
>>859
Visual C++.netではコンパイルエラーになります。
861デフォルトの名無しさん:2006/10/03(火) 10:32:33
C++2005ってthis.Close()でコンパイルとおるん?
862デフォルトの名無しさん:2006/10/03(火) 10:35:02
VC.netでプログラムを使ってリリースして、
VC環境の無いPCで実行しようと思ったらできなかったんだけど
何か特別なことしないといけないのかな?
863デフォルトの名無しさん:2006/10/03(火) 10:35:37
int a[10];

と、宣言した配列変数aを事情があって、プログラム実行中に
a[11]に増やしたいんですけど、どうすればいいのでしょう?

もちろん、それまでa[1]〜[10]に入ってた値はそのままで
864デフォルトの名無しさん:2006/10/03(火) 10:49:09
馬鹿は放っておこう
865デフォルトの名無しさん:2006/10/03(火) 10:56:41
>>862
リリースしたなら大丈夫
何か特別なことはいらない。
866デフォルトの名無しさん:2006/10/03(火) 11:30:45
>>861
this->Close();
ならC++2005でコンパイル通ります。
this.Close()はC#ですね。
867デフォルトの名無しさん:2006/10/03(火) 17:51:19
>>852
プロジェクト作るとき、何を選択したか書けよ…

C++2005だって、プロジェクトの種類によってはそれは通らんよ。
868デフォルトの名無しさん:2006/10/03(火) 18:27:42
>>863
C++ならstd::vector使え、Cならmallocを使え。
869デフォルトの名無しさん:2006/10/03(火) 18:32:23
馬鹿は放っておこう
870デフォルトの名無しさん:2006/10/03(火) 19:38:36
馬鹿は869だろうが、スレタイすら読めんのか
871デフォルトの名無しさん:2006/10/04(水) 14:16:52
>>867
サンクス。

mallocは、何回か使うと、メモリ関連が原因で不安定になると書いてあったので
躊躇してたのですが、std::vectorでいってみます。
872デフォルトの名無しさん:2006/10/04(水) 14:48:46
おいおい、そんなバカなことよく信用するな。
それに独自のアロケータ書かない限り、同じヒープから割り当てられると思うよ。
873デフォルトの名無しさん:2006/10/04(水) 14:50:12
>>871
>mallocは何回か使うと、メモリ関連が原因で不安定になると書いてあった

何その糞本。今すぐ焼いて捨てた方がいいよ。
874デフォルトの名無しさん:2006/10/04(水) 15:16:02
なんでreallocじゃなくてmallocなんですか?
875デフォルトの名無しさん:2006/10/04(水) 18:35:41
馬鹿は放っておこう
876デフォルトの名無しさん:2006/10/04(水) 20:44:47
Borland のCコンパイラ 5.5.1を使っています。

char str[] = "我輩は猫である。";

とすると配列の長さをあわせてくれますが、

char *s;
s = (char *)malloc(100);
strcpy (s, "我輩は猫である");

この、文字列の長さに合わせて配列を宣言したいのですが、
どうしたらよいでしょうか?

char str[] = s; とか char str[strlen(s)+1]; とかしても
型が変換できないというエラーが出るものでわかりません。
877デフォルトの名無しさん:2006/10/04(水) 20:46:33
char* s = (char *)malloc(strlen("hoge")+1);
878デフォルトの名無しさん:2006/10/04(水) 20:58:54
ここVCスレですよ
879876:2006/10/04(水) 21:00:42
すみません。
スレを間違えました。
880デフォルトの名無しさん:2006/10/04(水) 21:13:40
VC++Expressを使っているのですが、行番号の表示をするにはどこをいじれば良いんでしょうか。
881デフォルトの名無しさん:2006/10/05(木) 03:04:47
ツール->オプション->テキストエディタ->すべての言語(ないしは任意の言語)->全般
882デフォルトの名無しさん:2006/10/05(木) 12:48:38
スレ違いかもしれませんが
VCで作ったプログラムのテスト項目書を作りたいんですが
どういった項目を作ったらいいか分かりません
こういうことを解説してるサイトとかありますか?
883デフォルトの名無しさん:2006/10/05(木) 16:52:27
先輩に聞け。
すぐ側に居眠りして仕事してないのがいるだろ?
884デフォルトの名無しさん:2006/10/05(木) 19:07:13
>>882
本屋に行ってテストの本を買え
885デフォルトの名無しさん:2006/10/06(金) 00:30:33
>>882
馬鹿みたいな動作をツリー状に派生させていけばおk
886デフォルトの名無しさん:2006/10/06(金) 10:00:52
>馬鹿みたいな動作をツリー状に派生
「びっくりするほどユートピア」 からどう派生しよう・・・?
887デフォルトの名無しさん:2006/10/06(金) 20:52:01
すべてのプログラムをフックし、ダイアログメッセージを表示する際に
そのメッセージの内容を取得し、ダイアログを表示する代わりに画像を表示したいのですがどうしたら
よろしいでしょうか。
888デフォルトの名無しさん:2006/10/06(金) 21:10:59
apiフック?
889デフォルトの名無しさん:2006/10/06(金) 21:25:44
>>888
ええ。そうだと思います・・。
890デフォルトの名無しさん:2006/10/06(金) 21:31:17
 ポインタのポインタの意味をおしえてください。
891デフォルトの名無しさん:2006/10/06(金) 21:48:46

□ ポインタのポインタ

□ ポインタ

□ 変数
892デフォルトの名無しさん:2006/10/06(金) 21:56:56
つ【多次元配列】
893デフォルトの名無しさん:2006/10/06(金) 23:18:39
多次元配列とポインタのポインタは等価か?
894デフォルトの名無しさん:2006/10/06(金) 23:19:55
その話題秋田
895デフォルトの名無しさん:2006/10/07(土) 00:06:21
>>890
ポインタで出来る事を考えろ。
ポインタとは何かを考えろ。

行儀良いグローバル変数の使い方が出来るようになる…かもな。
896デフォルトの名無しさん:2006/10/07(土) 00:37:54
コードエディタでよく使うキーボードショートカットで
おすすめあったら教えて。

Ctl+DELで次の単語まで削除とか知ったとき嬉しかった。
カスタマイズしたらviみたくできるの?
897デフォルトの名無しさん:2006/10/07(土) 00:57:29
タブ切り替え
(Alt + W)×2

前のタブ
Ctrl + Tab

キーマクロ
Ctrl + Shift + R
Ctrl + Shift + P

現在の単語の終わりまで移動する方法ない?(≠次の単語の先頭)
マクロ組むときに欲しい
898デフォルトの名無しさん:2006/10/07(土) 01:13:12
Ctrl+カーソルキーじゃだめ?
899デフォルトの名無しさん:2006/10/07(土) 02:43:59
俺もそれだが、駄目か?

まあ、ちょっと中途半端な動作するよな。
馴染んじまったので、嫌いな動きじゃないんだけども。
900デフォルトの名無しさん:2006/10/07(土) 03:34:01
 デリゲートを素人にも優しく簡単に説明してちょ。
901デフォルトの名無しさん:2006/10/07(土) 09:30:05
ちょっと腹の調子が悪くて下している日の事。
902デフォルトの名無しさん:2006/10/07(土) 09:33:12
それはゲリデートではないのでしょうか?
903デフォルトの名無しさん:2006/10/07(土) 11:25:45
>>900
電話すると30分以内に門を持ってきてくれる商売
904デフォルトの名無しさん:2006/10/07(土) 14:38:24
キーボードの/のコマンドの右横のコマンドを押すと¥が出るんですが
どうすれば直りますか?
905デフォルトの名無しさん:2006/10/07(土) 14:54:30
>>898-899
それだと、次の単語の先頭、なんだよな
もちろんそれも大事なんだけど、それとは別に欲しいんだよ('A`)
906デフォルトの名無しさん:2006/10/07(土) 15:01:29
>>904
フォントをarialとかにする。
907デフォルトの名無しさん:2006/10/07(土) 15:18:54
はて、キーボードにコマンド? キーのことでいいのかな?
それはさておき素朴な疑問だが、"/"の隣には"."とSHIFTしかないのだが。
908デフォルトの名無しさん:2006/10/07(土) 15:24:54
英語キーボードかよ!
909デフォルトの名無しさん:2006/10/07(土) 15:57:43
すいませんバックスラッシュの話です
ariaに直そうと思うんですが
officeのオプションで確認するとarial unicode msとなっているのに
バックスラッシュを押しても¥が出ます
910デフォルトの名無しさん:2006/10/07(土) 16:14:48
>>909
日本語キーボードのアサインだとそれが普通じゃない
911デフォルトの名無しさん:2006/10/07(土) 16:34:03
>>910
どうすればいいのでしょうか?
912デフォルトの名無しさん:2006/10/07(土) 16:41:20
>>911
まず、何に使いたいのかを聞きたいんだけど
913デフォルトの名無しさん:2006/10/07(土) 16:56:25
プログラム書くときに使うので
914デフォルトの名無しさん:2006/10/07(土) 17:57:43
\ とバックスラッシュは、内部的には同じもの
915デフォルトの名無しさん:2006/10/07(土) 18:30:53
>>874
ていうか元の質問の回答はreallocだろ。
916デフォルトの名無しさん:2006/10/08(日) 12:33:51
MFCを使わずにWin32だけで作ってきたプロジェクトで
MFCを使ってダイアログ表示させたいんだが
むり?
917デフォルトの名無しさん:2006/10/08(日) 18:29:44
enum型のデータ(ここではD3DFORMAT)を保存したいんだが
int型にキャストして戻しても大丈夫?
918デフォルトの名無しさん:2006/10/08(日) 20:58:47
enum型のままでいいじゃん。
919デフォルトの名無しさん:2006/10/08(日) 22:08:51
今、ダイアログボックスにスライダーを配置したのですが、
いざ実行し表示させてみると、スライダーの背景が白になってしまい、
スライダー以外の背景が灰色なのでどうも違和感が出てしまいます。
どうすればスライダーの背景色を灰色にできるのでしょうか?
開発環境はVisualC++6.0でWindowsXP、MFCは使わずWin32APIで作っています。
どうか、よろしくお願いします。
920デフォルトの名無しさん:2006/10/08(日) 22:11:51
>>909
ツール→オプション→互換性→「バックスラッシュを円記号にする」のチェックをオフにし、OKを押す。
初期状態でこれがオンになっており、オンになっているとMS Wordでは欧文フォントを使っていても、
バックスラッシュを円記号の字体を持っている日本語フォントで表示するようになる。

もちろんこれは見かけだけの問題であり、>>914のいうとおり。
921デフォルトの名無しさん:2006/10/09(月) 00:06:22
何から手をつけたらいいのかわかりません、。
922デフォルトの名無しさん:2006/10/09(月) 00:19:03
とりあえず手を動かせ!
MSDNを「チュートリアル」で検索して、めぼしい所から読み進めていけ!
923デフォルトの名無しさん:2006/10/09(月) 13:52:29
919です。自己解決しました。ダイアログのプロシージャの戻り値の型を
小文字のboolから、大文字のBOOLに変更するとうまくいきました。
boolとBOOLって違うのですか?
924デフォルトの名無しさん:2006/10/09(月) 16:47:32
>923
BOOL の上にマウスカーソルを持っていって右クリック、
出てくるコンテキストメニューにある [定義に移動] を左クリック。
925デフォルトの名無しさん:2006/10/09(月) 17:38:23
次スレまだ〜
926デフォルトの名無しさん:2006/10/09(月) 17:58:34
>>923
boolはC++の組み込み型。
BOOLはWindows APIの一部としてintからtypedefして作られた型。

>>925
慌てるな、まだ早い。
927デフォルトの名無しさん:2006/10/09(月) 20:18:05
>>924
知らんかった。感動した。
928デフォルトの名無しさん:2006/10/09(月) 20:19:25
>>927
カーソル合わせて F12 でもおk
929デフォルトの名無しさん:2006/10/10(火) 00:02:54
2005にしてから間違ってF1キーを押すとうちだとブラクラだお(^ω^;)
930デフォルトの名無しさん:2006/10/10(火) 00:55:20
MFC8.0を学びたいのですが、どういった書籍を買えば良いでしょうか?
931デフォルトの名無しさん:2006/10/10(火) 01:57:01
>>929
F2 とよく間違うwwwwww
932デフォルトの名無しさん:2006/10/10(火) 03:49:37
>>924,926さん
どうもありがとうございました。おかげでスッキリしました♪
933デフォルトの名無しさん:2006/10/10(火) 11:46:49
はじめまして。
わけあってC++でプログラミングをしなければならなくなった者です。
プログラミングの完全なる初心者で、参考書の最初のほうの初歩レベルでストップしてます。

…こんなプログラムを作りたいんだけどどうしたら良いですか?
みたいな質問も受け付けてくれますか?
934デフォルトの名無しさん:2006/10/10(火) 11:49:55
>>933
君には到底無理
935デフォルトの名無しさん:2006/10/10(火) 11:50:23
>>933
そのプログラムがどうしても、VC++でないと作れないということでしたらどうぞ。
そうでなくても叩かれる覚悟があるならどうぞ。
936デフォルトの名無しさん:2006/10/10(火) 11:52:57
>>935
既に>934で叩かれてるねw

>>933
「わけあって」のわけ次第だな。
仕事でお鉢が回ってきて、周囲にプログラミングを判るのが誰もいないなら、
案外プログラムを作る以外の解決策があるかもしれない。

他の部署からプログラミングに配置転換ということなら、諦めた方が早いがな。
937デフォルトの名無しさん:2006/10/10(火) 11:58:54
>>935
ありがとうございます。
C++Builder 6を用いて、画像解析をしたいのですが…
まずは、『画像ファイルを開く』
『画像のピクセルデータ(R・G・B)の取り出し』
『計算結果の可視化』
『可視化画像の保存』
という4つが出来ればいいものと考えています。

説明不足でしょうか?
938デフォルトの名無しさん:2006/10/10(火) 12:00:27
( ゚д゚)ポカーン
939デフォルトの名無しさん:2006/10/10(火) 12:04:13
>>936
『わけ』は、アカハラってことで。

さらにご説明を…
2枚のデジタルカメラ画像をそれぞれR・G・Bに分解して、そのデータ同士で計算します。
NDVIっていう値をご存知でしょうか?
940デフォルトの名無しさん:2006/10/10(火) 12:18:17
http://pc8.2ch.net/test/read.cgi/tech/1158844912/579
ネチケットというものを知らないらしい。
あんたあれか?
40歳前後の技術者で、急に触った事も無いプログラミングが必要になって焦ってるのか?
941デフォルトの名無しさん:2006/10/10(火) 12:19:35
マルチはするし、スレ違い(ここはC++Builderスレじゃない)だし、
アカデミックハラスメントが理由だし、植生指標なんてどう見ても専門ネタだし。
この板で解決策が得られる可能性は完全に消えたな。
942デフォルトの名無しさん:2006/10/10(火) 12:22:27
>935を読んだ上で敢えて書いているのだから、よっぽど叩かれる覚悟があるんだろ。
植生関係か。取り敢えず学会誌に登録しているアドレス宛てにメールでもばら撒くか。
943デフォルトの名無しさん:2006/10/10(火) 12:23:00
了解です。
お騒がせいたしました。ありがとうございました。
944デフォルトの名無しさん:2006/10/10(火) 12:23:39
皆、見事に釣られたな。
945デフォルトの名無しさん:2006/10/10(火) 12:30:55
インテルのサンプルプログラムが見れるって聞いたんですがどこにありますか?
946デフォルトの名無しさん:2006/10/10(火) 12:34:30
このサイトが参考になるのでは?
http://www.sweetnote.com/board/moeroda/
947デフォルトの名無しさん:2006/10/10(火) 12:36:24
もうちょっと詳しいのはありますか?
948デフォルトの名無しさん:2006/10/10(火) 19:04:17
>>939
c++の基礎からすべてを教えるとなるととても1スレじゃ足りない
とっかかりが解らないのならばまず参考書を眺めなさい
そして実際にサンプルでもいいので動かすことです
そうすると次に何をしないといけないかが明確になってきます
それをただひたすら繰り返すだけです
途中でどうしても行き詰ったら専門のスレに質問してみましょう
何がわからないのか明確であれば大抵は質問の必要性はありません
大抵の情報はネット上にいくらでも転がっているからです
質問するのは、どうしても情報が見つからないマニアックなネタか
ただの馬鹿です
マニアックネタは運が良くないと叩かれるだけですw
949デフォルトの名無しさん:2006/10/10(火) 23:56:11
このスレの存在意義に関わる発言だなw
お前たちゃ何か、初心者さんが釣れるのを待って袋叩きにしたい人々か。
950デフォルトの名無しさん:2006/10/11(水) 00:02:14
オイ、サマージャンボしろよ
951デフォルトの名無しさん:2006/10/11(水) 00:04:21
>>949
>C++Builder 6を用いて、
人を馬鹿にするのも大概にしてもらいたいね。
952デフォルトの名無しさん:2006/10/11(水) 00:12:23
だよな。
せめて、BDS2006を使えよ。
953デフォルトの名無しさん:2006/10/11(水) 00:16:05
くだすれVisual C++(超初心者用)
954デフォルトの名無しさん:2006/10/11(水) 00:17:31
スルーすりゃいいのに、自分に向けられた発言だと思い込む人もいるんですね。
955デフォルトの名無しさん:2006/10/11(水) 00:24:56
うん。
956デフォルトの名無しさん:2006/10/11(水) 00:50:41
うんにゃ。
957デフォルトの名無しさん:2006/10/11(水) 01:10:46
>>933
は何を思ってこのスレッドを質問対象にしたのだろう
そんなことを考えて眠れなくなりそうだ
958デフォルトの名無しさん:2006/10/11(水) 01:11:44
つーか、眠れないw
明日4時おきなのに・・・
959デフォルトの名無しさん:2006/10/11(水) 01:25:27
>>958
後26時間もあるんだから、今眠れなくても問題ないだろ。
960デフォルトの名無しさん:2006/10/11(水) 01:30:07
>>959
間違った、今日の4時
あと2時間半でおきなきゃ
961デフォルトの名無しさん:2006/10/11(水) 01:33:05
その状況で寝ると、大音響の目覚ましをスルーするか、
さもなくばスヌーズつきの目覚ましをきっちり止めて棚に戻したことも
記憶に残らずそのまま寝直す漏れがきましたよ。
962デフォルトの名無しさん:2006/10/11(水) 08:37:49
>>937
スレ違いなんでこれ以上はレスしないけど。
MFCなら一応CBitmap, BCBならTBitmapというのがあるけど画像処理用では無いので細かい
ピクセル扱うには使い辛い、画像処理系ならこの辺は自作が基本、詳しくはCreateDIBSection等
でぐぐってみ、後画像のロードもヘッダ解析して自前でロードが基本、その辺が面倒なら描画
は遅いけどGDI+等のライブラリなどを使う方法もある、MSから落とせたりその辺にヘッダ込み
で置いてたりするけどVC++では無くBCBの場合はそのままでは使えないのでインポートライブラリ
は自分で用意の事。
963デフォルトの名無しさん:2006/10/11(水) 12:59:20
ビットマップだけならLoadImage、JPEGとかも対応するならOleLoadPicture
って感じで自分は手抜きしてる。ヘッダ解析('A`)マンドクセ
964デフォルトの名無しさん:2006/10/11(水) 14:52:43
>>963
OleLoadPictureは使った事無いけどLoadImageってDDBじゃなかったっけ、ピクセル
参照するのにGetDIBitsでオリジナル以外にコピー作成するし、メモリ転送のオーバヘッド
や保存する場合結局BITMAPINFOでヘッダ作る必要があったりでイマイチ効率的で無い気が、、、
965デフォルトの名無しさん:2006/10/11(水) 19:14:49
LR_CREATEDIBSECTIONでDIBゲット(゚Д゚)ウマー
966デフォルトの名無しさん:2006/10/11(水) 22:42:07
>>961
スレ違いなので、これで最後
結局1時間だけ眠って、日帰り出張行ってきたよ
往復7時間の移動+防塵ルーム5時間の過酷なスケジュールだったけど
なんとかソフトも立ち上がって無事帰ってこれたw
さすがに眠い
967デフォルトの名無しさん:2006/10/12(木) 17:34:48
VC2005 MFC ダイアログベースでやっております。
自分で関数を作ってそれを使おうと思ったらこのようなエラーがでました。
[ファイル名]Dlg.cpp ファイルの中に書いてあります。

error C3861: 'Get8': 識別子が見つかりませんでした
error C2365: 'Get8' : 再定義; 以前の定義は '以前は不明な識別子' でした

これはどういうことでしょうか?
関数自体は正しく書けてるのですが、その関数を実際使おうとするとこのエラーになります。
お願いします><
968デフォルトの名無しさん:2006/10/12(木) 17:57:39
>>967
「Get8」という名前が有効でない場所で使おうとしている。
それだけでは、これしか言えない。
969デフォルトの名無しさん:2006/10/12(木) 17:59:47
>>967
Dlg.hにGet8のプロトタイプ書いてないなんてオチは勘弁な
970デフォルトの名無しさん:2006/10/12(木) 18:22:39
>>969
別にプロトタイプなんて要らないじゃん。

#つーことは、>967はそれ以前の状態か。
971デフォルトの名無しさん:2006/10/12(木) 18:37:08
外部のexeやdatに引数を渡して実行したいんですけど、どうすれば良いんですか?
972デフォルトの名無しさん:2006/10/12(木) 20:46:32
>>971
datってなんだ?

exeは
system("a.exe aaaaabbbbcccc");
とか?
973967:2006/10/12(木) 22:12:46
>>968-970
うーん、それ以前の状態と。。。
私はただ、ボタンがクリックされた時のアクションとかを書くところに
void CpictORGDlg::OnBnClickedButton4()

・・・
a=Get8(2, i, j, pDC);
}

Get8(int a, int b, int c, CDC* pDC)
{
return ほにゃらら;
}

みたいにすぐ下にGet8を書いただけなんですけど他にやるべきことがあったのでしょうか?

974デフォルトの名無しさん:2006/10/12(木) 22:22:38
Get8(int a, int b, int c, CDC* pDC)
{
return ほにゃらら;
}
void CpictORGDlg::OnBnClickedButton4()

・・・
int a=Get8(2, i, j, pDC);
}

975デフォルトの名無しさん:2006/10/12(木) 22:29:02
VC++2005ですが、ヘッダーファイルを記述しなくても
関数が使えるのはなぜでしょうか?
976967:2006/10/12(木) 22:44:48
>>974
入れ替えるだけでできました><
すいません、こんな単純なことで><
977デフォルトの名無しさん:2006/10/12(木) 22:56:48
>>975
C++ではなく、Cならプロトタイプ宣言(の含まれたヘッダをインクルードすること)なしでも関数を呼び出せる。
決して勧めはしないが。
978デフォルトの名無しさん:2006/10/12(木) 23:40:44
>>977
 VC++2005でもできましたが?
やはり、ヘッダ書いた方が動作が速かったり、誤作動起こさない
っていうのがあるのでしょうか?
979デフォルトの名無しさん:2006/10/12(木) 23:45:39
は?
980デフォルトの名無しさん:2006/10/13(金) 00:34:05
>974のように、先に定義がある場合はプロトタイプ宣言は必要ない。
逆に言えば、定義がない場合や定義より先に使いたい場合には必要となる。
981デフォルトの名無しさん:2006/10/13(金) 05:41:42
>>972
間違えました、batです。
systemはbatも実行できますか?
982デフォルトの名無しさん:2006/10/13(金) 06:32:32
>>981
やってみれや
983デフォルトの名無しさん:2006/10/13(金) 06:38:27
>>982
ありがとうございました。
984デフォルトの名無しさん:2006/10/13(金) 07:41:16
文字列を渡してFindFirstFile関数でファイルをチェックする関数を作ったんですけど、
寿命の短い範囲にHANDLE変数を宣言して、頻繁に生成と破棄を繰り返すのは邪道ですか?
985デフォルトの名無しさん:2006/10/13(金) 08:20:32
>>977
インクルードしなくても動作するのになぜインクルードしないと
いけないのですか?利点はなんですか?
986デフォルトの名無しさん:2006/10/13(金) 08:54:43
もはやスレ違い
987デフォルトの名無しさん:2006/10/13(金) 08:59:08
>>984
好きにするがいい
988デフォルトの名無しさん:2006/10/13(金) 12:03:49
>>985
標準関数についてならば、標準インクルードファイルをインクルードすると型チェックが正しく働くと言うメリットがある。
例えば、string.hをインクルードせずにstrcpy()と書くとコンパイルはできるが当然まともには動かない。
989デフォルトの名無しさん:2006/10/13(金) 15:28:58
VisualC++6.0を使ってBMPファイルをリソースから
ロードするプログラムを作っているのですが、
コンパイルした後、EXEを別の場所にもっていって
実行すると、bmpファイルが見つからないエラー
が発生します。
DebugおよびReleaseフォルダに作成される
Script1.rcには間違いなく画像データが組み込まれて
いるのですが、これは何故なのでしょうか。


990989:2006/10/13(金) 15:30:08
>>989
Script1.rcではなくて
「Script1.res」の間違いです
991989:2006/10/13(金) 15:45:21
すいません、自己解決です。
別のリソース(Xファイル)からbmpを
コールしているところがありましたorn..
992デフォルトの名無しさん:2006/10/13(金) 16:51:38
>>978
VC++ 2005だって拡張子がcのファイルをコンパイルさせればCコンパイラとして働く。
993デフォルトの名無しさん:2006/10/13(金) 21:24:30
今DialogクラスのOnInitDialog内でリストにデータを挿入するコードを記述しております。

CListCtrl* pTeikouCtl = (CListCtrl*)GetDlgItem(IDC_LIST);
for(int iCnt = 0; iCnt < (int)m_Vector.size(); iCnt++){
pTeikouCtl->InsertItem(iCnt, vector[iCnt]);
}
UpdateData(FALSE);

実行してみたのですがリストには何も入っていませんでした。
どこか間違いなどありましたらご指摘をお願いいたします。

開発環境 VS2005 MFC WinXP SP2
994デフォルトの名無しさん:2006/10/13(金) 21:32:29
コードが少し間違っておりました。

今DialogクラスのOnInitDialog内でリストにデータを挿入するコードを記述しております。

CListCtrl* pListCtl = (CListCtrl*)GetDlgItem(IDC_LIST);
for(int iCnt = 0; iCnt < (int)vector.size(); iCnt++){
   pListCtl ->InsertItem(iCnt, vector[iCnt]);
}
UpdateData(FALSE);

実行してみたのですがリストには何も入っていませんでした。
どこか間違いなどありましたらご指摘をお願いいたします。

開発環境 VS2005 MFC WinXP SP2
995デフォルトの名無しさん:2006/10/13(金) 21:39:19
>>994
IDC_LISTはリストビューコントロールのIDか?
リストビューの表示タイプ(Icon,Report等)は?
表示タイプがReportの場合カラムヘッダはちゃんと追加してあるか?
InsertItemの戻り値は?
996994:2006/10/13(金) 21:49:35
>>995
リストビューではなくリストボックスでした。リストビューに変更したほうがよろしいでしょうか?
ちなみにInsertItemの戻り値はすべて0でした。
997995:2006/10/13(金) 21:57:36
>>996
好きなほう使えばいい。
リストボックスを使うならGetDlgItemの戻り値をCListBoxにキャストして
AddStringすればいい。
998994:2006/10/13(金) 22:03:57
>>997
リストボックスのままで行きます。
教えてもらった方法でうまくデータを挿入できました。
ありがとうございます。
999デフォルトの名無しさん:2006/10/13(金) 22:22:17
1000デフォルトの名無しさん:2006/10/13(金) 22:29:12
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。