★初心者にVisual C++を教えるスレ★ Part35
おおおおおおおおおおおおおおにぃぃぃぃちゃああああああああああああああああああああああんん
ぬるぽ
↓まかせた
int型の変数の偶数奇数を調べる方法を教えてください
一番下のビットを調べればいいような気がしますが、やり方がわかりません
8 :
7:2009/10/28(水) 01:45:36
ビット演算子というのを使って
int y = 1;
if((x & y) == 1){
こんな条件式でいいんでしょうか?
それでいいし
if (x & 1) { ... }
だけでもいい
>>7-8 BOOL IsKisuh( int nValue)
{
if ( nValue == 0) return FALSE;
return ( nValue % 2);
}
>>10 なんで0を例外扱いしているの?
まさか、0を2で割ってはいけないなんて寝惚けたことは言わないよね?
それは兎も角、BOOLを返す関数に割り算の結果を突っ込むのは問題だな。
BOOLだから負の値があっても大丈夫w
0って偶数だよな
16 :
デフォルトの名無しさん:2009/10/28(水) 15:06:30
XP VC2005 MFC での質問です。
ボタンイベント【OnBnClickedButton1()】で、
AfxBeginThread( ThreadFunk1, NULL );
を実行したいです。
その下に、
UINT CStringTestDlg::ThreadFunc1(LPVOID dummy)
{
AfxMessageBox(_T("スレッドが呼ばれた"));
return( 0 );
}
また、TestDlg.hファイルに、
static UINT ThreadFunc1(LPVOID);
を追加しました。
C2065: 'ThreadFunk1' : 定義されていない識別子です。
C2653: 'CStringTestDlg' : 識別子がクラス名でも名前空間名でもありません。
ですが、上記のエラーが出てわかりません。
他のツールソースを見ながら少しずつ出来ることを増やしていこうと勉強中なのですが、
これは他のソースからAfxBeginThreadを勉強しようと思いそれを使用している部分をコピーしました。
エラーが出るので、クラスビューから追加しなければいけないのかとも思いましたが、
UNIT は選択できないため、もしクラスビューから追加するのであればその方法も教えて頂きたいです。
同じ方が見ているかわかりませんが、Part34 949 です。
宜しくお願いします。
>>16 ThreadFunc1 を宣言してるのに、ThreadFunk1を使おうとしてるから。
k と c な。
おかしいと思ったら変数とかはコピペでもっていってみるといい。
18 :
16:2009/10/28(水) 15:30:20
>>17 ご指摘ありがとうございます。
盆ミスですみません。
error C2653: 'CStringTestDlg' : 識別子がクラス名でも名前空間名でもありません。
しかし上記にスペルミスはありませんでした。(「TestDlg」検索でたくさんひっかかるのを確認。)
は?そっちもかよ。
それはファイル名からの推測だが、
CTestDlgクラスを作ったのに雑誌通りCStringTestDlgのメンバとして書いてるんだろ。
CStringTestDlg → CTestDlgでどうよ
って雑誌じゃないか、本・・だっけ
21 :
16:2009/10/28(水) 15:52:01
>>19 ああああああああああああ。
ありがとうございます。
CStringなんとか と、先入観で勘違いをしていました・・・。
CTestDlgで通りました。
ありがとうございます。
>>21 >C2065
>C2653
コンパイラ エラー のコードがちゃんと出ているんだから、
ヘルプ(MSDN)で調べるクセをつけといたほうがいいぞ。
考えられる原因も、ちゃんとそこに載っているから。
23 :
16:2009/10/28(水) 16:06:19
>>22 了解しました。
MSDNもよくみるようにします。
あきらめよう
ディスクとかメモリ足りてる?
配列をひとつずつ宣言することはできますか?
たとえば最初にint A[5]とか宣言した後に6番目の要素を追加するような感じで
メモリ領域を確保とかすれば可能なんでしょうか?
28 :
デフォルトの名無しさん:2009/10/29(木) 16:27:35
std::vectorつかうとか、cならmallocとrealllocの組み合わせとかだな
malloc()とrealloc()を組み合わせるくらいなら、malloc()は要らない。
まあ書くこと無くてそう突っ込むやつも出るとは思ったけどな。
無くても書けるだけであったほうがわかりやすい時は使った方がいい。
初回だけ例外的にmalloc()を使って処理するようなみっともないプログラミングの方が判り易いと思うならその通りだね。
クラスAの関数内で宣言している配列Bを使って、クラスCの関数をループして使いたい場合、
@クラスAの関数内でループさせ、クラスCの関数に配列Bからひとつずつデータを渡して何度も呼び出す
A配列Bを(グローバルに宣言して)クラスCの関数に受け渡して、クラスCの関数内でループさせる
どちらの方法を使うほうがよりスマートでしょうか?
詳しく書くと、クラスCは描画処理関連のクラスで、描画はクラスCでしか行えません
クラスAの関数で描画用の情報をまとめてローカルな配列Bに入れています
Aの方が速度的に速そうな気がしますが、@の方がグローバル宣言しなくていいのでプログラム的に簡単なようにも思います
描画処理自体の回数はどちらも変わらないので、@の方が良いんでしょうか
34 :
33:2009/10/29(木) 21:49:06
追記:配列Bは、構造体の配列です
>>32 教わった通りのことしかかけない自分で考えることのない人はそれでいいよ
CもしくはC++スレでやればいい話
F10キーの”ステップ オーバー”で、次の行に移ろうかという時に、Visual C++がフリーズして
WindowsのGUI自体もほとんど反応しなくなってしまうのですが、どういった要因でフリーズしてしまうのでしょうか。
デスクトップのGUI全体が半死状態になって
Ctrl+Shift+Escでタスクマネージャを起動させてもまともにコントロールが表示されず、Visual C++のプロセスを殺すこともできなくて
PCの再起動かけないといけない状態です。
使用しているソフトはVC++2008EE SP1、XP Home Edition SP3で用いています。
>>37 それだけの条件では何が起きているかまでは想像しようがありません。ステップオーバーしようとしている関数が悪さをしているのでは?
>>33 クラスAの関数から配列BをクラスCの関数に渡すことはできないの?
構造体の配列でも引き数で渡すことはできますよ。
尤も、配列ではなくvectorにしておけばサイズ情報を別パラメータにしなくていい分よりシンプルになりますが。
int型の単純な代入文ですら発生します。
>>39 >37? だとしたら、動作環境が劣悪なんじゃないの? 特にメモリ容量辺りを見直すべし。
メモリは2GBなんですが・・・
仮想メモリというか、ページファイルも含めれば十分にあると思います。
XPたまにそういうことあるなあ
OS入れなおしで直ったが・・・
リリース版の作り方を教えてください
44 :
43:2009/11/01(日) 22:23:50
45 :
43:2009/11/01(日) 22:31:14
「プリコンパイル済みヘッダを使用しない」で解決しました
VC++ 2008 Express Editionでした
46 :
デフォルトの名無しさん:2009/11/02(月) 08:59:08
Visual C++ プログラマだと思い込んでいる、
ただの Visual C++ ユーザー、Visual Studio ユーザー
って多いよね。
プログラマではなく、ただの統合環境(IDE)ユーザーでしかない人。
IDEをそれなりに使いこなして、アプリっぽいものを作れる人と、
IDEがあってもなくても、アプリをガツガツ組める人とは
雲泥の差がある。
使いこなして無い奴のが多くないか?
デバッガ使える環境なのに使わないとかありえんだろ。
検索と同じように、コツというものはあるけどな
プログラミング自体始めてのやつもいれば
VCは初心者だけど他で経験あるやつ
万年初心者のやつ
初心者といってもいろいろだろ
いつもコマンドライン使ってるから
IDEの使い方は必要最小限しか知らない
GetGlyphOutlineという関数をループ中で
size = GetGlyphOutline(hdc, str[i], GGO_GRAY4_BITMAP, &gm, 0, NULL, &Mat );
こんな感じで使っているのですが、この関数の戻り値がループの初回は460で二回目は0xFFFFFFになります
それぞれの引数を初期化したり定数にしてみたりしましたが変わりません
この関数が0xFFFFFFを返すというのはどういう状況なんでしょうか
>>50 MSDNによると、
--
戻り値
フラグ GGO_BITMAP、GGO_GRAY2_BITMAP、GGO_GRAY4_BITMAP、GGO_GRAY8_BITMAP または GGO_NATIVE が指定されていて関数が成功した場合、
0 を超える値が返ります。失敗した場合は、GDI_ERROR が返ります。これらのフラグのうちの 1 つが指定されていてバッファサイズまたはアドレスが 0 の場合、必要なバッファのサイズがバイト単位で返ります。
GGO_METRICS フラグが指定されていて関数が失敗した場合、GDI_ERROR が返ります。
--
ということだそうだ。
成功じゃなかったら失敗だろ
>51
どうも
#define GDI_ERROR (0xFFFFFFFFL)
ということなので、どうやらGDI_ERRORが返ってきてるようですね
引数変えたりしてもうちょっと試してみます
いやいやいや・・・
エラーが返ってきてるのがわかったら次はGetLastErrorだろ
str[i]
ここがループ内で変わってるから、違う結果になってるだけだと思う
実はループ制御変数はiではなかったって落ちだったりして。
1>c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(32) : error C2143: 構文エラー : ';' が '文字列' の前にありません。
1>c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(32) : error C2059: 構文エラー : '文字列'
1>c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(32) : error C2143: 構文エラー : ';' が '{' の前にありません。
1>c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(32) : error C2447: '{' : 対応する関数ヘッダーがありません (旧形式の仮引数リスト?)
#ifdef __cplusplus
extern "C" {
#endif
インクルードファイルの" extern "C"{ "という部分で何故か怒られます
何かインクルードファイルが足りてないとかでしょうか?
全部貼れ
お前の書いたコードの stdio.h をインクルードする前の部分がおかしい
なんとなくわかりました どうも
StdAfxにプロジェクトで使う標準ライブラリまるごとインクルードして
プロジェクト共通の名前空間内でusing namespace std;
みたいな使い方してるんだけどStdAfxってこういう使い方でいいんでしょうか?
ファイルサイズの調べ方を教えてくだしあ
>>62 FindFirstFile() API を呼んで、返ってきた WIN32_FIND_DATA の
nFileSizeHigh および nFileSizeLow メンバを調べる
#include <iostream>
#include <boost/filesystem.hpp>
int main()
{
namespace fs = boost::filesystem;
fs::path p;
std::cin >> p;
if(fs::exists(p)){
if(fs::is_directory(p)){
std::cout << "Directory." << std::endl;
}else{
std::cout << "size: " << fs::file_size(p) << " bytes." << std::endl;
}
}else{
std::cout << "Not found." << std::endl;
}
}
>>64 if と else の間の文にはより短いほうを記述しなさいって習わなかった?
例外・除外する処理を先に書け、と言われた。
短い方とか聞いたことない。
67 :
62:2009/11/07(土) 20:14:30
>63
ありがとうございます
その構造体、調べてみると上位32ビットと下位32ビットを記録するってあるんですが、
32ビット超えててもWIN32APIで扱えるんでしょうか?
68 :
62:2009/11/07(土) 20:15:46
>64 こちらの方もありがとうございました
上位32ビットと下位32ビットなら
当然32ビット超えなら余裕で大丈夫だろ
DirectXとWin32APIを使用して開発しているのですが
DirectXも含めた形でコンパイルするにはどうすれば良いでしょうか?
>>65 そこしか突っ込むところが見つけられなかったんですねw
>>64でスペースを含むファイルを指定できるようにする場合はまた複雑なんですかね
>std::cin
これをスペースまで含んでも入力できるやつに差し替えればいいだけだろう。
newで確保した領域って、deleteしない限り確保されっぱなしなんでしょうか?
スマートポインタを使って見えないところでdeleteしてるとかでない限りそうだな
>76
ってことは、ある関数内でchar * str = new char[10]とかで宣言したら、
returnする前にdeleteしないと、ポインタが失われて開放できなくなるんでしょうか?
そうだよ、それがメモリリーク
わかりました、どうもありがとうございます
文字列からダブルクォーテーション+カンマをstrstrで検出したいのですが、
ダブルクォーテーションを含んだ文字列を扱うにはどうすればいいんでしょうか
現在は下のように一文字ずつシングルクォーテーションで代入しているんですが
char search[3];
search[0] = '"';
search[1] = ',';
search[2] = 0;
char * strtmp = strstr( str, search);
もっと簡単な方法はあるでしょうか?
それからもうひとつ別の質問ですが、文字列でswitchしたいのですが、switchは整数でしか使えないため、
現在else ifを何度も繰り返してやってる状態です
もっとすっきりした書き方はないでしょうか?
if(element == "TEST1"){ //elementはchar*型です
} else if(element == "TEST2"){
} else if(element == "TEST3"){
} else if...
こんな感じで何度も繰り返してます
>>80 エスケープシーケンスを使う
"\","
>if(element == "TEST1"){ //elementはchar*型です
elementはCString型かstring型の間違いよな?
せいぜい条件をvectorに入れてfindするくらいか。
>81
どうも \を入れれば特殊文字も使えるんですね 勉強になりました
>if(element == "TEST1"){
>} else if(element == "TEST2"){
>} else if(element == "TEST3"){
この例のように比較すべき文字列の最後の文字だけが異なるのなら、方法はある。
switch()は確かに文字列は扱えない。が、文字なら扱えるのだから。
クラスのメンバ宣言で
WCHAR * FILENAME;
どこかで
FILENAME = new WCHAR[20];
FILENAME = L"xxx.jpg";
どこかで
delete [] FILENAME;
これでコンパイルして実行すると、deleteしようとしたときに
AssertionFailure:BLOCK_TYPE_IS_VALIDが出ます
何故かdeleteできないようなのですが、どうすればいいでしょうか?
85 :
84:2009/11/10(火) 04:54:36
ポインタだから代入したら別のとこに移動しちゃうからdeleteできないんですかね
WCHAR FILENAME[20];で宣言して、memcpyで代入したら特に問題なさそうだったのでそちらにします
アドレス 値
0x0100 "XXXXXXXXXXXXXXXXXXXX"
0xf200 "xxx.jpg"
FILENAME = new WCHAR[20]; // FILENAME = 0x0100; FILENAME は確保したメモリアドレスを指す。
FILENAME = L"xxx.jpg"; // FILENAME = 0xf200; FILENAME はL"xxx.jpg"が置いてあるメモリアドレスを指す。
delete [] FILENAME; // 0x0100を解放しなければならないのに、0xf200のアドレスを解放しようとしたのでエラー
つまり、FILENAME = L"xxx.jpg"; がダメ。たとえば以下のようにする。
FILENAME = new WCHAR[20]; // FILENAME = 0x0100; FILENAMEは確保したメモリのアドレスを指す。
wcscpy(FILENAME, L"xxx.jpg"); // 0xf200のアドレスから、0x0100のアドレスに文字列をコピーしてくる。
delete [] FILENAME; // 0x0100に確保したメモリアドレスを解放する。
orz
>86
ありがとうございました
続けて質問ですが、例えば
char str[6] = "123456";
という文字列から、int型の整数123456を導きたい場合はどうすれば良いのでしょうか
double k = 0;
for(i = 0; i < strlen(str); i++)
k += (char[i] - 48) * pow( 10 , strlen(str) - i - 1);
これで多分求められる気がしますが、関数として用意されてるかな?と
int n = atoi(str);
ありがとうございました
>>88のはかなり無理やりだなw
数ヵ月後にもういちど書いてみて、全然違うコードになると思うから。
そろそろ教科書読み返して、MSDNの見方とググり方覚える時期だろw
>>88 "123456"という文字列を入れるのにstr[6]はサイズが足りないから、
atoiは動かない可能性がある。
コンパイラもちょっとは気を利かして配列を拡張してくれよな。
Javaとか普通にやってくれるぞ?
もう少し顧客満足度について考えるべき。
ご主人様の書いた内容に忠実に従っているんだから、いいコンパイラだと思うがなw
C言語初心者用のスレがあるだろ
>>94 サイズを指定しなければ気を利かしてくれる
まあ気を利かせるのが実行時なのかコンパイル時なのかの違いだな
>>94 気を利かせるってのがそもそもおかしい。
それを認めると、書いた通りに動かない可能性が出て来てしまうではないか。
プログラムはあなたが思ったようには動かないが、あなたが書いたようには動く
Win32API質問箱の方はC++専用でもないみたいなので、こっちでいいんでしょうか
CreateEventで作ったイベントオブジェクトの状態を知るにはどうすればいいんでしょうか
マルチスレッドにしてWaitForSingleObject()とすればイベントが起きるごとに作業ができるようですが、
マルチスレッドではなく、フレームごとに状態をチェックするようなことはできないのでしょうか
さあ?ここは初心者スレだから、初心者にも回答できる範囲ならすぐレスがつくと思うけど
状態ってシグナル状態のことだよね。
WaitForSingleObjectでいいじゃない。
シングルスレッドでだって使える。
SAFE_RELEASEマクロを利用するためだけに<d3d9.h>をインクルードするより、
自分でマクロ定義した方が良いんでしょうか?
それともコンパイルしたら同じことになりますか?
SAFE_RELEASEはd3d9.hに定義されてるのか。
すいません、勘違いでした
よく使われてるマクロだったのでどこかのヘッダに入ってるものだとばかり思ってました
プロジェクトってどのくらいの大きさで分けるべき?
ゲーム作ってるとして
・キャラクターの派生(100とかありそう)
・アイテムの〜
・その他の特に関連のないこまごまとしたソース郡
・それらを纏めるMainプロジェクト
ぐらいでいいんだろうか
すいません、日記と間違えました
根本的に、Visual C++と関係ないです。
VC++2005や2008であった、VC++ディレクトリというオプションはどこから選べますか。
以前は、ツール→オプションで開くダイアログボックスの、プロジェクトおよびソリューションというところにありました。
すいません。現在使ってるバージョンはVC++2010beta2です。
VS2010の話?
113 :
デフォルトの名無しさん:2009/11/21(土) 02:14:02
教えて下さい。
Win32APIオンリー(SDK)の環境でやってます。
キーボードのEnterキーを押されたら○○する・・というようにしたいのですが
Enterキー以外のキー(1とか2とかSHIFTとか)は正常に取得できます。
Enterキーだけが取得できません。
unsigned char keys[256];
WM_KEYDOWN:
GetKeyboardState(keys)
if (keys[VK_RETURN]&0x80){
MessageBox(hWnd,"Enterが押された","",MB_OK);
}
if (keys[VK_SHIFT]&0x80){
MessageBox(hWnd,"SHIFTが押された","",MB_OK);
}
シフトを押すとメッセージが出ますが、エンターキーは(テンキーの物も)押しても
何も出ません。
あと、 WM_KEYDOWN: で
if(wParam==VK_RETURN)のようにしても、やっぱりエンターキーだけが取得できません。(他のキーは問題ない)
またウィンドウ上にフォーカスを持つような物も配置していません。
どうしてでしょうか?
あるプロジェクトがスタートアッププロジェクトかどうか判別するためのマクロ(あるいは方法)って存在しますか?
判別されているものには必ず判別方法は存在する
117 :
113:2009/11/21(土) 16:05:45
>>115 GetKeyStateでも、やっぱりエンターキーのみが取得できません。
一応2台PCがあって、
WinMe(デスクトップ)とWinXP(ノート)のどちらでも同じ症状です。
デバッガで調べれば解決するだろうけど、MessageBoxが閉じてるだけの気がする
119 :
デフォルトの名無しさん:2009/11/21(土) 17:42:12
CDトレイを出したときオリジナルの音を出すことと
サブディスプレイに任意の動画を流すということは
VC++でできるのでしょうか?
できないならなんの言語でできるのでしょうか?
できる
$eject && beep
122 :
119:2009/11/21(土) 19:24:44
俺、やります!
CreateWindowでタイトルバーやフレームの太さを考慮して
ウィンドウサイズを指定するにはどうすれば良いでしょうか?
ある値を01100010・・・と変換してファイルに出力ってどうすれば出来ますか?
そのファイルを先頭から数ビット読んで対応したものに変換、というのを
繰り返したいんですが。それと、2進数は16進数で処理して表さなければいけないのでしょうか?
>>126 「2進数を16進数で処理する」という言い方では君が何を疑問に
思っているのか伝わらないよ。何か根本的なところを勘違いしている
気はするんだけど何を勘違いしているのか読み取れないよ。
ちなみにCやC++の整数型の内部表現は2進数しか無い。
ソースコードに整数型の定数値を書く際の表記法は
2進数、10進数、16進数の3通りが用意されているけどね。
でも3通りの表記法のどれを使ってもコンピュータに
とっては同じ意味になる。
たとえば次の3つの書き方は全く同じ意味になる。
1) int i = 10; // 10進数で表記した値(2進数の1010)を変数に代入
2) int i = 0x0a; // 16進数で表記した値(2進数の1010)を変数に代入
3) int i = 012; // 8進数で表記した値(2進数の1010)を変数に代入
この事を理解した上で、何を疑問に思っているのかもう1度投稿してみて。
>ちなみにCやC++の整数型の内部表現は2進数しか無い。
>ソースコードに整数型の定数値を書く際の表記法は
>2進数、10進数、16進数の3通りが用意されているけどね。
わろす
>>127 誤:ソースコードに整数型の定数値を書く際の表記法は2進数、10進数、16進数の3通りが用意されているけどね。
正:ソースコードに整数型の定数値を書く際の表記法は8進数、10進数、16進数の3通りが用意されているけどね。
質問の意味がよくわからないけど、2進数は「0b」、16進数は「0x」を頭に書けばそのまま使える
ビット演算について知りたいなら「ビット演算 C++」でググるのが早い
それとも"01100010"という文字列が欲しいって意味?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void dmp(unsigned char *b, int len){
int i, j;
for(i = len; --i >= 0; )
for(j = 256; (j >>= 1) > 0; )
printf("%d", (b[i] & j) ? 1 : 0);
}
int main(int ac, char **av){
char buf[4096];
int i, f;
printf("input: (123, 0.5, 3.4e-6, etc...) > ");
fgets(buf, sizeof(buf), stdin);
printf(buf);
f = 0;
for(i = 0; i < strlen(buf); i++){
char c = buf[i];
if((c == '.') || (c == 'E') || (c == 'e')){ f = 1; break; }
}
if(f){
double d;
sscanf(buf, "%lf", &d);
printf("%.16f\n", d);
dmp((unsigned char *)&d, sizeof(d) / sizeof(char));
}else{
sscanf(buf, "%d", &i);
printf("%d\n", i);
dmp((unsigned char *)&i, sizeof(i) / sizeof(char));
}
return 0;
}
CやC++初心者向けのスレがあるよ
ここって、ウィンドウ表示さえ覚束ない俺は来るべきじゃない?
別にGUIアプリじゃなくてもいいけど、C++プログラム自体がかけないというなら
C++初心者スレとかの方があってると思う。
::ShowWindow(
>>135, SW_SHOWMINNOACTIVE);
>>127-131 レスありがとうございます。しようとしている事は画像の符号化です。
輝度値をハフマン符号で表現し、ファイルに格納したいのです。
現段階では出力ファイルはそのままでは見れなくて、復号化処理を行う
と見れる、という状態にしたいのです。
簡単に言うと、値3→(10) 値10→(1001) ・・・を順に (101001・・・)とファイルに出力
出来ないかと思った次第です。
使用しているC++入門の本には8進と16進の扱い方しか載ってなかったので、
>>130さんの方法で少し頑張りたいと思います。
139 :
デフォルトの名無しさん:2009/11/25(水) 15:32:25
VC++6.0使ってるんだけど、
ダイアログアプリケーションでデストラクタの追加ってどうやればいいんですか?
仮想関数の追加やらみたけど、載ってないですし、自分でメンバ関数の追加でやっていいのかもわかりません。
ネットでいろいろ調べても追加の方法が書いてなく・・・
すみませんが、おしえてください m(_ _)m
>>135 ウィンドウ表示って難しそうだけど…
普通のCとWindowsCの違いって、CUIかGUIの違いとそっくりそのままなんだよね。
>>135 C言語の文法の法則によれば、CUIのプログラムができるし
WindowsのCの法則にちゃんとしたがって組めば、GUIの画面ができるし。
昔の真っ黒な画面に入力していったアプリが、GUIになってExcelに変わったとかいう話だけで
初心者が思うほど、GUIプログラミングも難しくないんだよね。Excelに変わったのと同じくらいというだけ。
win32だとshort intよりintのほうが早いって本当にゃん?
floatよりdoubleのほうが早いって本当にゃん?
>>139 メンバ関数の追加でやってもいいし、手動でやってもいい。
所詮はC++、IDEの機能を使わなきゃできない、なんて類のものではない。
>>141 たぶんいいたいのは、結局内部ではshort int はintに、floatはdoubleに変換するから
変換の手間だけ遅くなるって意味だと思うよ。まあ状況によってはそういうところもある
145 :
デフォルトの名無しさん:2009/11/25(水) 20:26:48
Visual C++ 2008 で、
ウォッチウィンドウが、昼間に使っていたときは表示されていたのですが、
夜になって表示されなくなりました。(Express , Professional 両方とも)
ヘルプメニューには
> [デバッグ] メニューの [ウィンドウ]、[ウォッチ] を順にポイントし、
と書いてありますが、[デバッグ] メニューの [ウィンドウ]に[ウォッチ]が見当たりません。
( [ブレークポイント]、[出力]、[イミディエイト]の3つのみ )
ウォッチウィンドウを表示させる方法をご存知の方、教えてください。
デバッグ時にしかそのウィンドウは無いはず。
147 :
デフォルトの名無しさん:2009/11/25(水) 20:47:08
>>146 ありがとうございます。パソコン再起動して、デバッグにしたら表示されました。
パソコン再起動中に、いつもは開かないVisual Studioのダイアログボックスが開いて、
デバッガが(応答なし)と出ました。
私がうっかりしていただけかも知れません。
自分のウォッチウィンドウへの依存度の高さに気付かされました。
148 :
デフォルトの名無しさん:2009/11/25(水) 23:01:50
マイクロソフト、Visual C++ 2008 Expres Edition を使用しています。
2次元配列の関数へのアドレス渡しで困っています。
GCC ユーザーなもので、いまいちVisual系が解かりませんのでご教授願います。
以下は、行列 Matrix[50][10] をつくり、各要素に1を代入するソースなはずです。
/****************************************************/
#include <stdio.h>
void ALL_ONE(int *Px, int NofRow,int NofCol){
int i;
for (i = 0 ; i < NofRow*NofCol ; i++){
*(Px+i) = 1;
}
}
void main(void){
int Matrix[50][10];
ALL_ONE(&Matrix,50,10);
/*以下に対して各処理を続行*/
}
/****************************************************/
GCCでは incompatible pointer type の warning は出るものの、
コンパイルでき、結果が表示されます。
マイクロソフト、Visual C++ 2008 Expres Edition では、
コンパイルエラー
error C2664: 'ALL_ONE' : 1 番目の引数を 'int [50][10]' から 'int *' に変換できません。(新しい機能 ; ヘルプを参照) 指示された型は関連がありません。
変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。となってしまいます。どなたかたすけてください、お願いします。
>GCCでは incompatible pointer type の warning は出るものの、
この時点でダメじゃないか。^^
いまいちVisual系が解かってないんじゃなくて、
C言語の基礎がわかってない。
&Matrix は int[50][10] 型へのポインタを返すので、
void ALL_ONE(int (*Px)[50][10], int NofRow,int NofCol){
と書く必要がある。
>>148 >ALL_ONE(&Matrix,50,10);
配列名は、配列先頭要素へのポインタだから、
「&」は、いらないんじゃないですか。
ALL_ONE(Matrix,50,10);
>>148 ALL_ONE(&Matrix[0][0], 50, 10);としておけ、VC++でもコンパイル通るしGCCでも警告が出なくなる。
これがエラーになるか警告しかでないかの差異はC++かCかの違い。
VC++でもCとしてコンパイルすれば警告になるし、GCCでもg++ならエラーになる。
Visual C++ 2008 Expres Edition を使っています。
1〜9の数字を並べて表示させようと思っていて、
int C[9]={1,2,3,4,5,6,7,8,9};
を最初に作ってます。
そして一度でも使った数字には0を当てはめます。
k=0;
do{
printf("数を選んで下さい\n");
while(k<9){
if(C[k]!=0){
printf("%d\n",C[k]);
k++;
}
最初に1〜9を表示させるにはどうすればよいですか?
C言語なら俺に聞け(入門編)にいきなさい
スレチなのですね。すみませんでした。
今のVC++ってVB6の感覚でできるんでしょうか?
VC6のとき、さっぱり意味がわからずに挫折した者なんですが
今のVCならいけるでしょうか?
あんまかわらん
C#にしとけ
VC++使いっています。
CStringに入っている文字列を
UTF-8形式のテキストファイルに書き出したいのですが、
よく分かりません。
CStringWに変換して
wfopen_s
で書き出せばいいかと思うのですが、書き出すサイズが
GetLength()で取得すると、文字数しかわからず、実際のサイズが分かりません。
やってること自体見当違いでしょうか・・・。
ご教授いただけますと幸いです。
>>157 まずはUTF-8とUTF-16とUnicodeの違いを調べたほうがいい。
MultiByteToWideCharとWideCharToMultiByteを使って以下のように変換をする。
char(sjis?) -> wchar_t(utf-16) -> char(utf-8)
wfopen_sとfopen_sの違いはファイル名をUnicodeで指定するかどうかだけ。書き込みには関係ない。
書き込むサイズはWideCharToMultiByteの戻り値を見れば分かる。
>>157 >>156も言っているが、ファイルを開くのにはwfopen_sでもfopen_sでも同じ。
ファイル名もCStringで与えるなら、_tfopen_sがおすすめ。
ただし、2番目の引数を"w,ccs=UTF-8"と指定すること。UTF-8への変換はCRTがやってくれる。
これだけで、あとはいつもどおり、fprintf_s/fwprintf_s/_ftprintf_sやfputs/fputws/_fputts、
putchar/putwchar/_puttcharなどFILE*に書き込む関数が使える。
160 :
デフォルトの名無しさん:2009/11/26(木) 22:12:06
148です。149さま,150さま,151さま
皆様ありがとうございました。
>>151さま
ALL_ONE(&Matrix[0][0], 50, 10);
でいけました!!!
ありがとうございます。
今後は、「配列の位置」をまじめに記述するよう心がけます。
考えてみれば、当然のことですね。。
&Matrix[0][0]でなくても&Matrix[5][0]でも良い訳ですからね。
>>149さま
ありがとうございます。
「まじめに動けばいい!」と思ってwarning は全て無視してました。
精進いたします。ちなみに
void ALL_ONE(int (*Px)[50][10], int NofRow,int NofCol){
はアウトでした。
>>150さま
gcc は ALL_ONE(Matrix,50,10); でいけまました。
visual C++ .net の教科書は & をつけろとありました。
ちなみに、visual C++で、配列が1次元のときは & なしで大丈夫でした。
私の想像ですが、ALL_ONE(Matrix,50,10);の記述は、コンパイル時、内部マクロで、ALL_ONE(&Matrix[0],50,10);に書き換えられてコンパイルされるのかと。。。ふと思いました。
おかげで、助かりました。再度、皆様方に厚く御礼申し上げます。
>私の想像ですが、ALL_ONE(Matrix,50,10);の記述は、コンパイル時、内部マクロで、ALL_ONE(&Matrix[0],50,10);に書き換えられてコンパイルされるのかと。。。ふと思いました。
死ね
マクロっていうのはおかしいけど、&HOGE[0]とHOGEが同一という認識は正しいよ。
自慢じゃないが、"&"と"*"は、ウォッチウィンドウで確認しながら、つけたり外したりするのが確実。
自慢じゃないけどね。
164 :
139:2009/11/28(土) 14:23:20
>>142 どうもありがとうございます。遅れてしまい、すみません。。
質問したこと忘れてました。。
メンバ関数の追加でやればいいんですね。自分は以前Java業でして、倉庫の奥の
VC6.0を引っ張り出して、遊んでいます。いまいちIDEの機能がつかめなく
どうすればいいかわかりませんでした。
助かりました。これから、やってみます。ありがとうございました。
ググッても必要な情報がでてこなかったので・・・
static double func[][4] = {
{ 1.0, 0.0, 0.0. 0.0 },
{ 0.0, 1.0, 0.0, 0.0 },
{ 0.0, 0.0, 1.0, 0.0 },
{ 0.0, 0.0, 0.0, 1.0 },
};
とあるソースに書いており、それは動いたのですが、他のプロジェクトのソースにこのまま写すと
error C2143: 構文エラー : ';' が '}' の前にありません。
error C2059: 構文エラー : '}'
error C2143: 構文エラー : ';' が '{' の前にありません。
error C2447: '{' : 対応する関数ヘッダーがありません (旧形式の仮引数リスト?)
error C2059: 構文エラー : ','
とエラーがでて動きません。
なぜでしょうか
>{ 1.0, 0.0, 0.0. 0.0 },
コンマがピリオドになっている。
追加ライブラリと同じように、追加インクルードファイルディレクトリを
ソース内でpragmaなどを使って指定する方法はありますか?
#pragma comment(linker, "/libpath:〜")
でできないかな?
ってインクルードかいな
直接指定したらいいじゃんw
>>168-170 stdafx.hあたりに、
>>168のようなライブラリフォルダと同じような書き方で
インクルードフォルダを指定できたらと思っているのですが、
やっぱり無いんでしょうかね。
pragmaでinclude関連はinclude_aliasしかわからん。
これと
>>170組み合わせたら?
つーかインクルードパスをソースから指定する理由がわからん。
自分が使わないものまで全部知ってる必要ないからな
正確な情報が必要ならサポートに相談すべき
出力ウィンドウに、ファイルパス+(行数)みたいな形で出力すると、
VC++標準のコンパイルエラーなどの出力と同じように、ダブルクリックとかF8キーでジャンプできるようになりますが
決まった形式とかあるんでしょうか。今はVC++の出力を真似て書いてます。
はなくそってうめぇな、おい
失礼します。
VisualC++ 2008 Express Editionを使用しているのですが、
グローバルな文字列の配列を宣言するには、どのようにすれば良いのでしょうか?
private: System::String^ PrivateString[1000];
これではエラーになってしまうので、何か良い方法がありましたらご教授よろしくお願いします。
>>178 エラーはこれです。
1>d:\cpp\Form1.h(986) : error C2728: 'System::String ^' : ネイティブ配列はこのマネージ型を含むことはできません
1> 'array<System::String ^>' を意図しましたか?
arrayを使えば良いのかな?でも
private: array<System::String ^> PrivateString = gcnew array<System::String ^>(1024);
ではダメでした
1>d:\cpp\Form1.h(987) : error C3149: 'cli::array<Type>' : トップレベルの '^' なしに、この型をここに使用することはできません
1> with
1> [
1> Type=System::String ^
1> ]
1>d:\cpp\Form1.h(987) : error C3845: 'HC3::Form1::PrivateString': ref クラス または値型の内部で、スタティック データ メンバのみ初期化することができます
array<System::String ^>^
じゃないのか
>>180 ありがとうございます。
加えてstaticにすることで、動作しました。
private: static array<System::String ^>^ PrivateString = gcnew array<System::String ^>(1024);
度々失礼します。
VisualC++ 2008 Express Editionで、iniファイルの操作を行おうと思っているのですが、カレントディレクトリの取得から躓いてしまいました。
http://msdn.microsoft.com/ja-jp/library/system.io.directory.getcurrentdirectory.aspx を、参考に記述してみたのですが、最初の
String^ path = Directory::GetCurrentDirectory();
の、ところでエラーが発生してしまいました。
1>d:\cpp\Form1.h(1049) : error C2039: 'GetCurrentDirectoryW' : 'System::IO::Directory' のメンバではありません。
1> c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : 'System::IO::Directory' の宣言を確認してください。
1>d:\cpp\Form1.h(1049) : error C2660: 'GetCurrentDirectoryW' : 関数に 0 個の引数を指定できません。
namespaceは宣言していますし、GetCurrent〜は::の後の予測変換で表示されているのを選んでいるので、メンバになっていると思うのですが・・・。
すいませんが、よろしくお願いします。
>>183 ありがとうございます。
'GetCurrentDirectoryのところで'GetCurrentDirectoryW'の説明があったから、そっちは検索してませんでした。
CLIもいろいろとめんどくさいのですね。
他スレからの誘導です。
可変長の符号をファイルに出力したいのですが
どのようなプログラムにすればいいでしょうか?
例.値(10進)「3 3 6 3 6 2」
3・・・00
6・・・01
2・・・100
出力後のファイル(2進)「0000010001100」
最低1バイト単位でファイルに出力したいのですが。
1バイトのバッファにビット演算で格納して言って、溢れたらファイルに出力でいいんじゃないの?
単なる文字列の置き換えじゃん。
プロジェクトをテンプレートとして登録したいのですが、それらしきメニューが見当たりません。
調べているとVC++2005では出来ないそうですが、VC++2008は出来ますか?
エディションはExpressです。
>>184 最近のWindows SDKだとその問題への対処がなされていて、
>>182のように書いてもエラーが出なくなっている。
いつからだかは分からないけど、すくなくとも最新のWindows SDK 7.0はそうなっている。
>>190 ありがとうございます。
それがVisual C++ にはエクスポートの項目が見つからないのです。
最近、VisualC++ 2008 Express Editionを使い始めたのですが、
テキストエディタのことで質問させて下さい。
カーソルのある行をコピー、カーソルのある行を選択、
もしくはカーソルのある行を削除というショートカットコマンドはあるんでしょうか?
MSDNで探して見たのですが、見当たりません。
もし、そのようなショートカットを使いたい場合はどうしたらいいのでしょうか?
カーソルのある行の最左端をマウスクリックすりゃその行全体を選択できるけど、それじゃダメなのか?
あとは Ctrl+X, とか Delete すりゃいいんだが。
RGB値に簡単に倍率を掛ける方法はないですか?
RGB(r*x,g*x,b*x)みたいな事をしたいんですが
これだと3色の値を覚えないといけないので
作られた後の色に対して倍率を掛けたいのです
RGB値って何?
RGB( r, g, b ) * x
これで何が不満だというのだ。
それは倍率になってないだろ。w
>>194 GetRValue GetGValue GetBValueでRGB値から各値は取れますよ。
>>192 1文字も選択していない状態でCtrl+Cすると、カーソルのある行をコピーすることになる。
Ctrl+Xで切り取りも同様。
200 :
194:2009/12/08(火) 21:59:21
>>193 回答ありがとうございます。
以前はそれで済ませてましたが、キーボードから手を離してマウス操作だと、
めんどくさく感じていたので・・・。
>>199 回答ありがとうございます。
やりたかった動作です。
本当に助かりました。
202 :
デフォルトの名無しさん:2009/12/09(水) 10:15:24
ぬるぽ
ガッ
といったところで1つ質問良いでしょうか
作成手段:「空のプロジェクト」から窓作成
目的:リソースビューで追加したウィンドウのハンドルを取得したい
コード抜粋
/**********winmain.cpp***********/
HINSTANCE hInst; //instance
HWND hEdit; //edit control
wndProc(HWND hWnd,UINT uiMsg,WPARAM wParam,LPARAM lParam)
{
HWND hDlog;//ダイアログのハンドル
switch(uiMsg){
case WM_CREATE://ウィンドウ作成時
hDlog = CreateDialog(hInst, MAKEINTRESOURCE(IDD_PROPPAGE_MEDIUM),
hWnd, DialogProc);//エディットボックスを持ったダイアログを作成
hEdit = /*??? エディットボックスのハンドルを取得 ???*/
/*** なんじゃもんじゃ ***/
}
/*** なんじゃもんじゃ ***/
}
/**********resource.h***********/
#define IDC_EDIT1 1020
#define IDD_PROPPAGE_MEDIUM 106
グローバル変数hEditにエディットボックスのハンドルを取り付けたいのですが
findwindowとかでは出来ないっぽいので、どーしたらよいものかと・・・
IDD_PROPPAGE_MEDIUMの中身はただのエディットボックスを持ったダイアログということでお願いします
GetDlgItemとか?
GetDigItem・・・
hEdit=GetDlgItem(hDlog, IDC_EDIT1);
でnullっぽい(unused)でした。
なんぞやり方間違ってるのか。ハテ
>>205 ほんとに0x00000000だったのか?
unusedは気にしないでいいぞ
SetWindowText(hEdit,MAKEINTRESOURCE(int value));
文でnullリファレンス例外が飛んでるっぽいのでnullだと考えてたのですが
じゃあどこか別のところを見ているのか・・・
>>207 >SetWindowText(hEdit,MAKEINTRESOURCE(int value));
そりゃないだろ、MAKEINTRESOURCEは数値を文字列に変換するわけじゃないぞ。
とりあえず、SetWindowText(hEdit, _T("Hello")); で試すとどうなる?
herroが出てきました・・・getdigitemは問題ないぽいです
value(int)を文字列の頭に入れておく・・・という感じでしょうか
数値文字列変換苦手だー
とりあえず万能のsprintf()を覚えておけばいいと思うよ。
sprintfの%.数字gで対応〜
ありがとうございます。山越えたみたいです・・・
VC++ 2008eeでC++の勉強を始めたのですが
この先どのように勉強を進めて良いのか分かりません
皆さんはどのようにマスターされたのでしょうか?
やさしいC++ 第3版の内容は一通り終わっています
なんか作る
基本的な文法が理解できるようになったのなら、後は何がしたいのかによる。
しょうもない質問
struct struct{
int i;
}
main(){
for(0から10回){
func1();
}
}
func(){
static struct a ={0};
a.i++;
}
もうここまで書いたなら試せって話だが。これってa.i=10でいいよね
C++スレでやってくれ
>>214 自分が作りたいものによって学ぶべきものが変わってくるという事ですね
色々調べてみます
ありがとうございます
日本語話せます程度の話だからな
日本語の単語を知ってます、程度じゃね
話せるようになるには数作るしかない
エラーで困っているので助けてください。
error LNK2001: 外部シンボル ""public: virtual void __thiscallCDialog::OnInitDialog(void)" (?OnInitDialog@CDialog@@UAEXXZ)" は未解決です。
error LNK2001: 外部シンボル ""public: virtual void __thiscallCDialog::OnInitDialog(void)" (?OnInitDialog@CDialog@@UAEXXZ)" は未解決です
error LNK2001: 外部シンボル ""public: virtual void __thiscallCDialog::OnInitDialog(void)" (?OnInitDialog@CDialog@@UAEXXZ)" は未解決です。
error LNK2019: 未解決の外部シンボル "public: virtual void __thiscallCDialog::OnInitDialog(void)" (?OnInitDialog@CDialog@@UAEXXZ) が
関数"public: virtual int __thiscall CprototypeApp::InitInstance(void)"(?InitInstance@CprototypeApp@@UAEHXZ) で参照されました
とエラーが出ていますが、原因がわからず困っています。
同じソースを別の人の環境で実行すると何もエラーも出ずにコンパイル・リンカーが通ります。
私も昨日までは通っていましたが、コーディングを設定ファイル?とかがおかしくなってしまったのか、
昨日のデータを使ってもリンカーエラーが出て困っています。
環境として、
自分 VisualStadio 2008 VC++(MFC)
別の人 VisualStadio 2008 VC++(MFC)
本当に困っています。何か知っている方がいらっしゃったら力を貸してください。
必要なライブラリをリンクしてない
>>220 ソリューション丸コピーでビルドが通らないの?ならVisual Studioをインストールしなおすのがいいだろう。
プロジェクトファイル(.vcproj)やソリューションファイル(.sln)もソースファイルだよ。
プログラマが操作した設定が書かれている。
MFCスレとマルチ
MFC+VC2005です。
BYTE配列で持ってるBMPファイルのデータを
(CFileでWriteするとbmpファイルになるデータです)
JPEGに保存する方法はどういうのがあるでしょうか。
無駄なディスクI/Oは避けたいので
一度保存して、それをCImageで開くと言うのは最終手段と思っているのですが。
IStreamで
IStreamが嫌なら、CreateDIBitmapしてCImageのAttachを呼ぶなど。
227 :
デフォルトの名無しさん:2009/12/10(木) 18:37:01
@コマンドプロンプトを開く
Aバッチファイル実行
Bcl sample.cppと打つ
この手順で勉強しているのですが、毎回毎回これをやるのがつらいので、
sample.cppをドラッグアンドドロップすると上記手順を実行してくれるようなソフトや方法はありませんか?
そういうやり方が好みならコンパイル用のバッチ作って、そこへsample.cppをドラッグアンドドロップだな
あと、コマンドラインでやりたいなら、VCじゃなくて他のコンパイラの情報を参考にした方がいいし、
コンパイラもそっち使った方がいいかもしれない。
229 :
デフォルトの名無しさん:2009/12/10(木) 19:18:44
なるほど、Windowsのバッチで出来るのですか。
Linuxでg++でプログラミングしたことはあるのですが、WindowsでやるならVisual C++をやりたいなぁと思っておりまして。
申し訳ありませんが、
Windowsのバッチを書いて下さりませんか?
m(_ _)m
こんな感じかな。vcvars32.batは2番のバッチファイルのことだから適当に置き換えること。
@echo off
call vcvars32.bat
cd /d %~dp1
cl "%~nx1"
pause
231 :
デフォルトの名無しさん:2009/12/10(木) 20:01:39
どうもありがとうございます。
これ、ちょっと応用すればいろいろ使えそうですね。
232 :
224:2009/12/11(金) 09:18:48
233 :
デフォルトの名無しさん:2009/12/11(金) 15:03:58
VC++って何気に変数名とかクラス名とかに日本語使えるけど
別に良いよね(ry
一応vcもNMAKEってのがあるぞ、Linuxやってるとのことなので一応
msdev もコマンドラインから使えるよ。
.dsp とターゲット("〜〜 release" とか)を指定してビルドできる。
236 :
229:2009/12/12(土) 00:15:30
ありがとうございます!!!
Visual C++ 2008 Express EditionでCLRのWindowsフォームアプリケーションを作ろうとしています。
標準状態で、画面のDPI設定を通常サイズ(96DPI)と125%(120DPI)にした場合で実行時のフォント及びフォームサイズが変わってしまいのす。
変わらないようにする方法は無いのでしょうか?
画面のDPI設定を無視して常に同じ大きさのフォームを表示がしたいです。
CLRを使うことがそもそもの間違いならそう指摘してください。
>変わらないようにする方法は無いのでしょうか?
考え方が間違っている。
96DPIと120DPIの双方に対応できるようにするのが正解。
winの仕様だから、おまかせで作るとそうなる。
気に入らないなら自分で調整するか、最初から自分で出す。
サイズを変えてるのに変わってしまうという文句はどういうことだ?
変えてるんだから変わるのは当たり前だろ?
プログラム次第ですが、変わって構わない場合と、変わると不味い場合がある。
不特定環境での実行を想定するなら、サイズが違うことを前提で画面サイズ固定のプログラムを作るのは当たり前ですよね。
Visual C++ 2008 expressでdataGridViewを使用しようとしています。
環境としては.NETを用いて、CLR-Windowsフォームアプリケーションの
プロジェクトにしています。
double 型の配列データをdataGridViewに表示させようとしています。
例えば、test[0]〜test[10]にdouble型の数値データが入っていると
します。
フォームにdataGridViewを配置します。名前はデフォルトのまま
dataGridView1とします。自動的に出てくるメニューで列の追加を選び、
ヘッダーテキストをtestにして追加を押します。そして閉じます。
次に、Form1.Load()で
dataGridView1.Rows.Add(test);
と書くと、ここで
error C2228: '.Rows' の左側はクラス、構造体、共用体でなければな
りません
とエラーが出てしまいます。どのようにすればよろしいのでしょうか。
記してあること以外は、全てデフォルト設定になっています。
>>242 dataGridView1->Rows->Add(test);
244 :
デフォルトの名無しさん:2009/12/14(月) 13:31:30
初心者です教えてください。
LinuxでC言語であるプログラムを作り、その途中に「scanf("%d",&a);」
というのをいれて、プログラムをそこで一度ストップさせ、
なにか入力があったときに開始する といったようなものを作りました。(説明下手ですみません)
VCではコマンドラインがありませんが、同じようにできますか??
できるよ
Win32コンソールアプリケーションで作ればいい
246 :
デフォルトの名無しさん:2009/12/14(月) 13:59:53
ありがとうございます
板違いかもしれませんが、VCで作ったプログラムを
matlabでmexして動かそうと思っているのですが、コンソールアプリケーションをmexしたらできますか?
247 :
デフォルトの名無しさん:2009/12/14(月) 14:09:14
すみません 246の者です
日本語が意味不明な気がしたため、追記させていただきます。
244で書いたようなことをmatlabでmexして動かしたいと思っています。
それは可能ですか?
わからんけどmatlabとかmexとかVisualStudioでググるとそれらしきことを書いたとこはあるみたいだが
リソースエディタというのは無料では使えないんでしょうか?
vc++2008eeを使ってるんですがどこを探しても見つからないもんで・・・
VisualStudio付属のリソースエディタはStandard以上、EEには無い。
ただし、リソースコンパイラ等は付属しているので、テキストでrcファイルを書くか、
外部のリソースエディタを使って組み込むことは可能。
ありがとうございます
外部ツール導入してみます
253 :
デフォルトの名無しさん:2009/12/15(火) 23:25:00
すみません。VC++6.0で作成したソフトをVC2008でもう一度作成しようとすると
変更点とか多いですか?
友達がVC6.0で作ってくれたサンプルコードをくれたので、VC2008でやってみたいんですが。
もちろんMFCです。ちなみにVC2008は、StandardEditionをかおうかどうか迷っています。
容易にできるなら、買いたいと思っています。
StandardEditionは2010で廃止だお
今買わないとPro買うしかなくなるお
VC++2008EEでwindowsSDKを使っています。
createprocessで起動したアプリのウィンドウサイズを取得取得したくて調べていたら
EnumWindowsでプロセスIDの一致でウィンドウハンドルを取得するのが一般的みたいなので
ttp://akky.cjb.net/mfc/appclose.html ここのサンプルを試していたのですが、うまく動いてくれません。
プロセスID一致のifの中にブレークポイントを置くと止まるので、一致までは行ってるみたいなんですがメモ帳が終了しません。
どこがおかしいのでしょうか。
ブレークポイントで止まるなら、spy++とか実行してその時のウインドウハンドル比べたり
WM_CLOSEがたしかに投げられてるか調べてみては。
サンプルは説明を簡素化するのにメモ帳使ってるだけで
きちんとデバッグしたかったら自分で作ったプログラム使えばいい。
>>255 そこ、MFC使ってるじゃん。
あなたは、MFCのついてないExpressEditionだから、そのサンプルのままじゃ動かないでしょう。
まあちょっとやってみたけど(Afx)MessageBoxの変更でEEで動かしたよ
CreateProcessの第2引数はリテラルじゃダメで変数にしたけどな。
ちゃんとメモ帳起動して終了した。
>>255 これを追加 #include <windows.h> の下の行に追加
↓
#include <tchar.h>
以下の箇所を書き換え
AfxMessageBox(_T("メモ帳を終了させます。"));
↓
MessageBox(NULL, _T("メモ帳を終了させます。"), "メッセージボックス", MB_OK);
if(AfxMessageBox(_T("強制終了させますか?"), MB_YESNO) == IDYES)
↓
if(MessageBox( NULL, _T("強制終了させますか?"), "メッセージボックス", MB_YESNO ) == IDYES)
質問者はブレークポイントで止まると書いてるんだし、
実行とメモ帳起動まではうまくいってるとわかるだろう
ソース貼れよ
VC++2008EEで、CrossWalkSDK(3DCGソフト間のデータ
コンバータ用のSDK)を勉強しているのですが、SDK内の
ヘッダのクラスの定義部分でエラーが出てしまいます。
===================================================
#include "SIBCNode.h"
#include "SIBCString.h"
//エラーの出る部分
class XSIEXPORT CdotXSIParam : public CSIBCNode
{
public:
CdotXSIParam(); // Default constructor.
//-- 以下メンバ関数が続く ---------------
};
//--- Global Functions ----------------------
XSIEXPORT CdotXSIParam* CreatedotXSIParam();
XSIEXPORT void AllocateLocalXSIArray(SI_TinyVariant*, SI_Long);
<エラーの内容>
error C2470: 'CdotXSIParam' : 関数定義のようですが
パラメータリストがありません。外見上の本体をスキップします。
===================================================
CdotXSIParamがクラス名である事は分かるのですが、
エラーの元になっているクラス名の前やグローバル関数の
戻り値の前にある「XSIEXPORT」の部分の意味が分かりません。
こういう書き方は自分の持っているC++の本(独習C++)では
載っていないので推測なのですが、VisualC++で設定される機能
なのでしょうか? よろしくお願いいたします。
XSIEXPORTに右クリックで定義を表示させれば出てくることもあるけど
たぶん#defineで関数規約か__declspec(・・・)とか書いてあるんだと思うよ
XSIの文字で固有のものだってわかるだろう
クラス宣言の前に呼び出し規約っぽい定義はあんま知らんな、クラス宣言が関数に思われてるし
定義XSIEXPORTの中身がわからんとなんともいえんが 他のファイルの後にincludeしなきゃならんとかか
266 :
263:2009/12/16(水) 19:51:57
>>264さん、
>>265さん、ありがとうございます。
仰るとおりファイル内を検索してみると
#ifndef XSIEXPORT
# define XSIEXPORT __declspec(dllexport)
#endif
という記述が見つかり、VC++でプリプロセッサや
追加の依存ファイル等をいろいろ設定していたら無事に
コンパイルできるようになりました。
declspec等の呼び出し規約キーワードというものがあるのも
知りませんでした…orz
そういうオチだったのか・・・・・・ ゴクリ 予想できなかった。。。。
だれか、漏れに最新版のVisualStudioを寄付してほしいお。
寄付してくれたら、ひまだからご希望のソフトをつくってあげるお。
最新版のVisualStudioが当たるプレゼントコーナーとかどこかにないかお?
MFCがいるから、StandardEdition以上だお( ^ω^)
評価版の有効期限を延ばす方法
ネットで知ったのですが、評価版の有効期限を延ばす方法が存在します。実際にやってみたのですが、うまくいきました。
あまりおおっぴらにできることではないので内緒です。でもちょっと調べれば判るとおもいます。
どうしても判らない人は、Express Editionで我慢しましょう。
Visual Studio2008 Standard EditionではExpress Editionでは出来なかった、.NET無しでのフォームアプリケーションの視覚開発できますか?
フォームは.net
フォームを使わない、リソースエディタでのダイアログやMFCのFormViewということなら可能
Expressでもできるけどね
SDKなら無料で配布してたよね
俺のチンポも無料で配布してんだけど・・・なかなか
>>277 なかなか人柱になってくれる人がいないわけね。
プログラム以前の質問なんですが
新規作成からプロジェクトを選んでCLR→空のCLRプロジェクト
プロジェクト名を入力し、ソリューションのディレクトリ作成にチェックを入れてOKを押すと
画面左側にソースファイルやヘッダーファイルなどのソリューションのディレクトリが表示されるはずなんですが
何をしてもディレクトリが表示されません、そのおかげでソースファイルを右クリック→追加新しい項目からcppファイルを追加したいのにそれができません…
何か解決方法はありませんでしょうか?
visual c++ 2008 express editionを使用していて、過去に同じことをやったらソースファイルが出ていたはずなんですが今は出てこないんです…
279です
すみません、自己解決できました
バーのプロジェクト→新しい項目の追加からcppファイルを追加し動作させることができました
スレ汚し申し訳ありませんでした
ドンマイ
VC++2005を使ってスレッドを使うプログラムを作成しています。
AfxBeginThread()を用いてスレッドにウィンドウハンドルとデータを与え、
計算を行った後メッセージを贈ってスレッドの作成元に計算結果を送信するようにしているのですが、
実行すると2〜3回に1回の頻度で
「一般エラー:ウィンドウハンドルが無効です」
とエラーメッセージが表示されます。
実行するたびに出るわけではないので、どこでエラーが出ているのかが良く分からないのですが、
問題としてはどういったことが考えられるのでしょうか。
一番単純でありがちなのが、スレッドのパラメータとして渡すのがメインスレッドのローカル変数で、サブスレッドが値を読む前に破棄されているということ。
285 :
282:2009/12/24(木) 21:39:05
色々レスありがとうございます。
>>283 調べてみましたが、どうも問題は変数部分ではなくて
計算を行うスレッド内で動かしていたプログレスバーの部分だったようでした。
最初の書き込みで一切触れていない部分ですみません。
>>284 メインのほうが見に行くということは、計算のスレッド部分の関数を呼び出すなりして
値を取り出すということでしょうか
まだ上手く動作できるようになっていませんので、まだ何か思いつく所があったらお願いします。
age
VC++2008を使ってCの勉強をしている者なんですが、最初はCの入門書籍・入門サイトを見ながら、
「ソリューションの中のプロジェクトにソースファイル(cppファイル)を追加して、コード
(例えばHalloWorldの練習)を書く。
書けたらデバッグなしで開始→上手くいったらHalloWorldの練習コードを全部消して次のコード
(例えばscanfの練習)を書く→上手くいったらscanfの練習コードを全部消して次のコード……(以下繰り返し)」
のような手順で勉強していました。
でも最近になって1つのソリューションの中に複数のプロジェクトを作れるのを知って、試しに
ソリューション
L__プロジェクト1
L__HalloWorldの練習.cpp
L__プロジェクト2
L__scanfの練習.cpp
のような構成にしてみました。
それでこれを「デバッグなしで開始」してみると、いつもHalloWorldしか実行されません。
scanfの練習.cppを真ん中のエディタ画面に出していても、HalloWorldが実行されます。
ソリューションの中の一番上のプロジェクト以外を実行したい場合はどうすればよいのでしょうか?
自分で色々試してる最中に、メニューに「プロジェクトのビルド順序」というのを見つけたので
「プロジェクトの依存関係」というところをいじって「ビルドの順序」タブで
scanfの練習.cppが一番上に来るようにしてみたのですが、上手くいきませんでした。
見当違いな質問をしていたらすみません……。
>>287 ソリューションエクスプローラーで、プロジェクトを右クリックして
「スタートアッププロジェクトに設定」を選ぶ。
289 :
287:2009/12/31(木) 23:22:38
>>288 できました! ありがとうございます!!
「スタートアッププロジェクトに設定」って、てっきり「VC++を起動した時に、勝手に
そのプロジェクトを開いてくれる」(ブラウザのスタートページに指定みたいな)機能」だと
思い込んでました。
これで前の練習用のコードを見返すのも楽になりそうです、ありがとうございました!!
入門レベルでそういう方法は非常に珍しいと思う。
291 :
デフォルトの名無しさん:2010/01/03(日) 23:39:44
フォームのスクリーンキャプチャをしたくて、下記のように書いたのですが、
コンパイルは通るのに、肝心の中身はキャプチャされていなくて真っ黒になってしまうのですが、
どうしてでしょうか?
いろいろ試したのですが、どうしても解決できないので、解決策を教えて下さい。よろしくお願いします。
Graphics^ g1 = this->CreateGraphics();
Bitmap^ img = gcnew Bitmap(this->Width, this->Height, g1);
Graphics^ g2 = Graphics::FromImage(img);
IntPtr dc1 = g1->GetHdc();
IntPtr dc2 = g2->GetHdc();
HDC hDC1 = static_cast<HDC>(dc1.ToPointer());
HDC hDC2 = static_cast<HDC>(dc2.ToPointer());
BitBlt(hDC2, 0, 0, img->Width, img->Height, hDC1, 0, 0, SRCCOPY);
ノートPCでVisualStudio2008を使いたいのですが、推奨解像度はどれくらいでしょうか?
実用的な解像度を教えていただけると助かります。
可能な限り大きいやつを。
XGAあれば何とか使えるが、高ければ高いほど能率上がる。
CStringで躓いているのですが教えていただけないでしょうか?
下記のようなソースで構造体にCStringを使っているのですが
そこに値をセットしようとするとメモリアクセス違反に
なってしまいます。どうにも問題ないように見えるのですが
何か間違いがあるのでしょうか?
typedef struct _st {
CString cstr;
} ST;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
void *hoge = malloc(sizeof(ST));
ST *st;
st = (ST *)hoge;
st->cstr = "";
}
295 :
294:2010/01/05(火) 17:28:18
ごめんなさい。わかりました。
敢えて言おう。mallocを使うのはお勧めしない
CStringについて教えてください。
Cstring buff = "hogehoge";
buff = buff.Left(4);
とするとbuffを4文字で切れますが、これだと無駄にメモリを
使ってしまうと思います。
char *buff[10];
strcpy(buff, "hogehoge");
buff[4] = '\0';
みたいにぶつ切りできないでしょうか?
CStringからchar*への変換は下記のような方法があるようですが
このようにメモリをコピーする方法しかないでしょうか?
CString str = "test";
char *p = new char[str.GetLength()+1];
strcpy( p, str );
delete [] p;
char *p;
p = str.char_pointer();
みたいにできればありがたいのですが。
>>302 英語のリファレンスただ置くだけで回答だと思うなよ。てかCStringの日本語ドキュメントなかったっけ?
俺自身CStringあんまり使わないから仕様は詳しく知らないんだが、メンバ関数にoperator const char*()が存在してるなら
p = (char*)(const char*)str;
でいいんじゃないかと思った。
ただまぁせっかくCStringクラスを使っているんだから生のポインタなんて使わない処理にした方がいい気がするんだが。
>>303 いや、こいつ調べなさすぎだろ、と思って皮肉でURLだけおいたんだが。
306 :
303:2010/01/06(水) 11:18:02
>>304 ごめん俺何か変なこと言ったかな。皮肉られてる気がするんだが
>>306 いえ。とんでもない。助かりました。
VB厨なので調べるのも難しくorz
308 :
303:2010/01/06(水) 11:30:00
リロードしてから書き込むべきだった
>>305 そういうことかスマソ
>>307 ただの被害妄想だったか
参考までに今調べたら「CString ポインタ 変換」でまんまの解決策があったとだけ言っておこう
>>303 これならコピーした方がいいだろ。
内部へのポインタをconstはずして
使うとか、トラブルのもと。
>>307 const char* ではなく char* に変換するのが「書き換えたいから」という目的なら、
p = (char*)(const char*)str;
は危険。
書き換えないのなら
char* p ではなく const char* p にすればよいだけ。
>>297 助かりました。大変ありがとうございました。
298の
buff = buff.Left(4);
これってまずくないの?
(298はTruncateを使うようにしたみたいなんで分岐した話として)
>buff = buff.Left(4);
>これってまずくないの?
なぜまずいと思ったのか言ってごらん。
教えてください。
VC2003 でアンマネージなプロジェクトに一部マネージを混ぜて使ってます。
(ファイルごとのプロパティで /clr をつけてます)
ここで、アンマネージの関数(クラスの静的メソッド)の引数にマネージオブジェクト
(System::Cllectios::ArrayListなど)をつけて普通に呼び出す分には問題なく実行できます。
が、この関数を関数ポインタ経由で呼ぼうとすると例外が発生して不正終了します。
以下のようなコトをしたいのです。
アンマネージの関数ポインタ?がマネージオブジェクトの引数に対応してないのでしょうか。
void func( System::Collections::ArrayList* list )
{}
void hoge()
{
System::Collections::ArrayList* list = __gc new System::Collections::ArrayList();
void(*test)( System::Collections::ArrayList* ) = func;
func( list ); // ok
(*test)( list ); // ng
}
>>314 CStringTの基底クラス、CSimpleStringのメンバ。
http://msdn.microsoft.com/ja-jp/library/8fx6d2h7.aspx >>315 <gcroot.h>をインクルードして、funcとtestの型をgcroot<Systaem::Collections::ArrayList*>にしたらきちんと動いているようだった。
ちなみに、VC++ 2008では元のコードのままで動いた。おそらく2005でもそうだと思う。
> アンマネージの関数ポインタ?がマネージオブジェクトの引数に対応してないのでしょうか。
これが原因だと思う。gcroot<>自体はアンマネージ型で、
アンマネージクラスにマネージクラスオブジェクトを置きたいなどというときに使える。
CStringみたいな途中でサイズ変る前提のやつは
ブロック単位でメモリ管理してるから
ちまちまバイト単位でメモリ節約しても何の意味もなかったと思う。
318 :
デフォルトの名無しさん:2010/01/07(木) 11:42:49
C++でdllを作成しています。
他のdllをリソースとして、自分が今作成しているdllに組み込むことは可能でしょうか?
具体的には、SQLiteのdll、sqlite3.dllを自分が作成しているdllにリソースとして組み込みたいと思っています。
組み込まなくても使えると思うけど、ばれないようにパクリたいということ?
320 :
318 :2010/01/07(木) 12:38:38
>>319 返信ありがとうございます。簡単にいうとそうです。
sqlite3.dllを使用していることをバレるのが困るというより、
sqlite3.dllを使用しているので SQLite形式のファイルをどこかで使かわれていることが、簡単にばれるのが少し困るので
この方法を考えています。バイナリで見られたらすぐにわかりますが(笑
リソースとしてdllを読み込む方法を知らなかったので質問しました。 可能ということでよろしいでしょうか?
sqliteってソースあるね。あれを取り込んだら?
322 :
319:2010/01/07(木) 15:28:18
>>321 ・・・オープンソースがあることを知りませんでした・・・
ありがとうございます。 それを使ってみますm(_ _)m
323 :
312:2010/01/07(木) 16:13:18
>>313,314
i=i++; と似た匂いを感じてしまったんだが、考え直してみたら i=i+1; と同じか。
Left()はconstだからいいんだな。
324 :
315:2010/01/07(木) 21:25:27
>>316 それで出来ました。
すごく助かりました。これで似たようなコードをあちこちに置かなくてすみます。
ありがとうございます。
回転寿司でお稲荷さんが回ってなかったから注文したら、
渡されるところで隣に座ってた人に横からお稲荷さん取られた
それは私のお稲荷さんだ!って言ったら反対側に座ってた人がイクラを噴出した
私も一瞬後で気づいて、たぶん顔真っ赤になってたろうけど全部食べた
みなさんはCStringを使わないとのことですが
何を使っているのでしょうか?
>>326 いや、ふつーに使ってるよ。
使わないって半可通だろ?
へー
std::string
>>327 Windowsプログラマはそうだろうけど。
・・・ま、ここはVCのスレだし、いいのか・
解決法を教えてください。
MS VisualC++2008でcvBlobを使おうとしたのですが、エラーがでてビルドが完了しません。(下記にエラーメッセージ)
OpenCV1.0は既にインストールしてあり、PC上での動作は確認してあります。
OSはWindows XP SP3です。
足りない情報がありましたら教えてください。
よろしくお願いします。
////////エラーメッセージ//////////
\cvblob.cpp(27) : fatal error C1083: include ファイルを開けません。'opencv/cv.h': No such file or directory
opencv\cv\include\cvcompat.h(784) : warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。
test.cpp(3) : fatal error C1083: include ファイルを開けません。'cvblob.h': No such file or directory
cvlabel.cpp(27) : fatal error C1083: include ファイルを開けません。'opencv/cv.h': No such file or directory
文字コードはとりあえずおいといて、
インクルードパスの設定の仕方をだな
>332
cvBlobは使いたいプロジェクトのディレクトリに入れるだけでOK…
という話を見たのですが、インクルードパスの設定が必要になるんですね。
もう少し格闘してきます。
アドバイスありがとうございました!
全くの初心者ですが教えてください。
まず適当に設置したボタンをクリックするとエディットボックス1(m_edit1)に表示されている文字列のうち、マウスでドラッグして選択した部分のみを別のエディットボックス2(m_edit2)に表示させたいです。
次にm_edit2に表示された文字列を取得してgoogle検索やWikipedia検索をさせるボタンを配置したいです。
わからないことは以下の二つ
1.選択文字列を取得して、新たに定義したCStringにコピーする方法
2.任意の文字をgoogle、wikipedia検索させる方法
2に関してはVC++じゃないような気もするのですが、教えてください…
335 :
334:2010/01/11(月) 07:35:08
すみません自己解決しました
VC++2008EEでCTRL+ALT+DLLを無効にするGINAを作成したく
http://7ujm.net/C++/GINADLL.html 上記にあるサンプルをビルドしてXP pro sp3に入れてみましたが
「MSGINA.DLLを読み込めませんでした」と出てログオンできません。
初心者でソース自体に不備があるのか、ビルドの仕方が悪いのか判断できない状況です。
アドバイスお願いします
そんなこともわからない人が手を出すのは危険だと思うが
ビルドした時とインストールしたものは同じ環境?
まずは普通にDLL作って普通に動作させるとこからやってみては
もし違う環境ならDLLの前にEXEもやってみて
339 :
336:2010/01/11(月) 14:38:41
>>337 アドバイスありがとうございます。
インストールしたものは別環境です。
たしかに仮に動かせたとしても今の私では危険ですね。
VB厨なので敷居は高く感じますが、ものぐさせずに一からやってみます。
環境違うのなら、まずはReleaseビルドとランタイムライブラリ関連かな
とりあえずデフォルトが/MDなのでredist入れるか/MTにするかかな。
341 :
336:2010/01/11(月) 16:17:00
>>340 /MTに変更して動作しました。
ありがとうございました!
342 :
デフォルトの名無しさん:2010/01/12(火) 08:21:46
exeを下記のような動きにする場合はどのようにすればいいのでしょうか
・exe実行時の引数に何も指定しなかった場合はFormを表示してwindowsアプリとして振舞う
・exe実行時の引数に特定のコマンドが指定されていた場合はFormを表示せず
動作を実行したのち終了
開発環境はvc++ 2008 Express Edition SP1です
>>342 lpCmdLineに文字列があるかどうかで分岐させればいいんじゃないの?
>>343 ありがとうございます。
できました
もしかして・・・vc++ 2008 Express Edition SP1の場合CLRを使わないと
Formなどを使うことはできませんか?
>>344 Express Editionにはリソースエディタついてないからな
Formは.net専用
今日windows7が家に届いて、c++を本格的に勉強しようと思っています
おすすめのコンパイラってあります?
>>348 Visual C++ 2008 Express Edition
char a = "no";
string s;
s = "aho"+a+"sakata";
↑はエラー出るけど、こんな感じの書き方はできませんか?
+= や copy使うとパッと見すごく分かりづらいです。
char aをstring型で複製するのも嫌です。
char a = "no";
この時点でなぁ
char* a = "no";
std::string s;
s = std::string("aho")+a+"sakata";
こんなんで?
>>353 ありがとうございます
まさにこんなのです
if(a = b + c){ }
とやったら、b + c != 0の場合にif文の中に入るんでしょうか?
そうだよ。
>>355 まあa, b, cは組み込み型だよね?
そうじゃないとしたら+や=のオーバーロード次第でなんとでもなる。
358 :
デフォルトの名無しさん:2010/01/18(月) 11:07:28
教えてください。
VisualC++6.0で他人が作ったものを修正することになりました。
現在はVisualC++2005しかないため、6.0のdspファイルを開き2005用に変換しました。
プロジェクト→プロパティ→MFCの使用で、
「スタティックライブラリで使用」を選択し、ビルドしたところ、
下記のようなエラーが出てしまいます。
1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) は既に LIBCMTD.lib(dbgdel.obj) で定義されています。
1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) は既に LIBCMTD.lib(delete2.obj) で定義されています。
1>.\Debug/lc8_kensa.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
「共有DLLで使用する」を選択すれば、ビルドできます。
(もちろん警告は山のようにでますが・・・)
原因と解決方法を教えて頂けますか?
また、取り急ぎ、「共有DLLを使用する」でビルドしたアプリケーションを配布し、
実行したところ、「例外 不明なソフトウェア例外(0xc0000409)がアプリケーションの0x00411741で発生しました」
と表示され、エラーとなってしまいます。
この原因は「スタックライブラリで使用」にしてないので、起こったと思っているのですが、
違いますか?
よろしくお願い致します。
>原因と解決方法を教えて頂けますか?
エラーも警告も無視せずに対処しよう
360 :
デフォルトの名無しさん:2010/01/18(月) 13:33:08
>エラーも警告も無視せずに対処しよう
対処したいのですが、原因がわからず、対処方法がわかりません。
教えて頂けないでしょうか?
警告に関しては原因がわかっておりますので、対処したいと思います。
元のやつの設定がどうなってるかわからんが、
プロジェクトのプロパティのコード生成のランタイムライブラリのあたり弄ってごらん
仕事の手伝いはお金を払ってもらわないとな
363 :
デフォルトの名無しさん:2010/01/18(月) 17:25:33
>>361 ランタイムライブラリを適当にいじってみましたが、残念ながらうまくいきませんでした。
>>362 すいません。仕事じゃないです。
私事です。すいません。。。
自分で作ったやつじゃなくて他人が作ったやつをいじりたいとか
正直ソフト板あたりでやってほしいと思う、
>>363 とりあえず、何をどうしたか全部書け。
まずはビルドするとき、クリーン→リビルドでやれ
366 :
デフォルトの名無しさん:2010/01/18(月) 18:03:25
>>364 すいません。ソフト板っていうのがあるんですか!?
初心者でよく知らず、申し訳ありません。
>>365 まず、6.0で作成されたプロジェクトをフォルダごと、自分のプロジェクトフォルダに移しました。
\\My Documents\Visual Studio 2005\Projects\***
という具合です。
そこで、dspファイルを開くと、
プロジェクト '***.dsp' は現在の Visual C++ プロジェクト形式に変換されなければなりません。変換した後、このプロジェクトを旧バージョンの Visual Studio で編集することはできません。
変換してこのプロジェクトを開きますか?
と出てくるので、「はい」を選択して開きました。
これの「MFCの使用」を「スタティックライブラリ」に選択すると、
>>358のようなエラーが出てしまいます。。。
クリーン→リビルドでやるので正しいやり方なんですね!
これまではビルドしかしてませんでした。。。
勉強になります。
ありがとうございます!
そのソースをうpすればコンパイルしてやらんこともないよ
正しいやり方つーか、、、設定変えたら状況によっては必要。
これではまるやつも多いので・・・
それよりVS2010と.NET4で開発すると中途半端なのを何とかしてくれ。
WCFやEntityFramework4を使ったプロジェクトで作成しても、開発環境内でしか動作しない。
IISでホストできない構成ファイルとかアセンブリ参照とか、、、もう鬱になる。
370 :
デフォルトの名無しさん:2010/01/19(火) 05:16:27
完全に初心者ですが、困っています。
助言よろしくお願いしますorz
VC++6.0にて、
あるプログラムの閾値をスライダーで調整できるようにしろ、との実習が出たのですが、
ResourceViewタグのDialogでウィンドウ内にスライダーを作ったところでつまずいています。
スライダーとプログラムはどうすれば関連付けられるのでしょうか。
ボタン、テキストボックス、その他コントロールと同じ
VS初心者じゃなくプログラミング初心者でVS等無料ツールを使いつつ学習できるサイトありますか?
373 :
358:2010/01/19(火) 11:37:32
スタティックでビルドできました。
参照URL:
http://support.microsoft.com/kb/148652/ja プロジェクト→プロパティ→構成プロパティ→リンカ→入力を選択
「特定のライブラリの無視」に Nafxcwd.lib Libcmtd.lib を入力
「追加の依存ファイル」にも Nafxcw.lib Libcmt.lib を入力
で、ビルド成功しました!
皆様、アドバイスありがとうございました!
しかーし!!
「例外 不明なソフトウェア例外(0xc0000409)がアプリケーションの0x00411741で発生しました」
と表示され、エラーとなってしまいます。
ググってみても、SPのバージョンが低いとかセキュリティの問題と出てきますが、
他に考えられる原因はありますか?
いろいろ間違ってるw
375 :
373:2010/01/19(火) 13:51:25
>>374 いろいろって何ですか?
教えてくらはい(>_<)
377 :
デフォルトの名無しさん:2010/01/19(火) 20:09:19
ものすごく初心者なのでサルにもわかるようにお願いします
ドキュメントにhellowprld.cppといファイル名でテキストで
#include <iostream>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
return 0;
}
と入力、helloworld.cppという名前で保存
Visual C++ 2008 Express Editionのコマンドプロントを開いて
[cd \]と入力さらに[cd cpp]とうつと指定されたパスが見つかりませんになります
なぜでしょうか?
保存したところにcdしろよ
[cd cpp]と打つ前に、[mkdir cpp]と打ってみたらどうですか。
>[cd \]と入力さらに[cd cpp]とうつと指定されたパスが見つかりませんになります
>なぜでしょうか?
ドライブが違うんだろ
いやいやいやいや、そもそも
>helloworld.cppという名前で保存
この保存場所さえ把握してないのではw
僕のVisual C++では#pragma region hoge が働いてくれません。
2005からの機能らしいですけど、2005のアカデミックバージョンは対象外ですか。
関数の定義など、他の部分でのコードの折り畳みはできるんですが……。
VC2008 Expressを使ってみたのですが、
Windowsフォームアプリケーションで作るとC++/CLIになるのですね?
CLIを使用しないで、フォームを使用したアプリケーションを作成するには、どうしたら良いのでしょうか?
無理。フォームは.NET Frameworkの一部
ダイアログリソースということなら、外部のリソースエディタ使って組み込むのはできる。
388 :
385:2010/01/25(月) 17:04:27
ありがとうございます。
C++/CLIでは.NET用のライブラリしか使えず、C++用のライブラリを使用したいのですが、
どうやって作成していいのか混乱してしまって・・・。
ダイアログソースで作成する場合、どのようなリソースエディタを使用すれば良いのでしょうか?
>>384 自分もVS 2005のアカデミックで今試してみたけど、
#pragma region hoge 〜 #pragma endregionは使えているよ。
何か間違えていない?
>>388 >>387がいいとは思うけど、リソースエディタでググれば2,3種類くらいに絞れると思うよ。
組み込むには、VC++EEに付属のrc.exeをビルドイベントとかで設定してやればいい
391 :
385:2010/01/25(月) 18:03:01
392 :
384:2010/01/25(月) 18:03:01
// main.cpp
#include <windows.h>
int function(int n) {
return n * 2;
}
#pragma region hoge
int WINAPI wWinMain(HINSTANCE, HINSTANCE, LPWSTR, int) {
return func(0);
}
#pragma endregion
こういう単純なコードですら、働いてくれません。しかも、この場合だとwWinMainまで死にます。
このコードに間違いはありますか?
デバッガのウォッチウィンドウでstd::vecterなどを見ると、単純にクラスメンバが表示されるのではなく、配列の要素数などが一目で分かる形で書かれているのですが、あれはどういう方法を使っているのですが?
394 :
393:2010/01/25(月) 18:39:56
×vecter
○vector
恥ずかしい死にたい
395 :
393:2010/01/25(月) 20:04:15
×使っているのですが
○使っているのですか
もう俺死んだ方がいい
ちょっと訛っただけだろ?w
細けえことは気にすんな!
397 :
デフォルトの名無しさん:2010/01/26(火) 00:54:54
VC2008ExpressEdition .Net環境でFormにスクロールバーを出して使おうとしています。
HorizontalScroll->Valueの値をスクロールイベントでいじっても0に戻ってしまいます。
回避する方法はないものでしょうか?
Formにはその他のコントロールは一切無し、したがってAutoScrollはFalseです。
Show時にHorizontalScrollをVisibleにしてファイルをドロップした段階でEnableにします。
デバッグ用に値を観察しているのですが、スクロールイベント終了時には値は正常なようです。
しかし再度イベントが発生した時にValueが0からやり直し、といった具合です。
主な目的は画像の貼り付けと表示です。
よろしくお願いします。
やりかた間違ってんじゃないの
VS 2005 SDI MFC です
現在View に表示されているテキストが、ファイルから読みこんだものか、
それ以外(コピペまたは、キーボードからの入力)を識別するAPI や方法があれば教えてもらえないでしょうか。
400 :
デフォルトの名無しさん:2010/01/28(木) 04:53:40
ちょっと調べていて疑問に思ったんですが、
MSペイントのキャンバスサイズをアンカーポイント?でつかんでサイズを自由に変更できるようになっているんですが、
あの処理は一から自分で組まないといけないのでしょうか?
それとも設定するだけで簡単に組み込めるようなクラスなどがあるのでしょうか?
401 :
デフォルトの名無しさん:2010/01/28(木) 20:02:24
Visual C++を初めて使っている者です。
私はC++でなく、C言語でプログラミングをしたいのですが、
どのように操作すればソースをコードできるのでしょうか。
教えて下さい。お願いします。
>>401 .cっていう拡張子のファイルにソースを書いて開けばビルドできるんじゃなかった?
403 :
401:2010/01/28(木) 20:11:24
VC++のデバッガの機能を使用するから、VC++上にコードかけって言うんです。
ソリューションエクスプローラのプロパティ→C/C++→詳細→コンパイル言語の選択
でも指定できる。
プロジェクト全体でもファイル個別でも。
VC++のデバッガを使うこととVC++上でコードを書くことはイコールにならんがな
{devenv,vcexpress} /debugexe hoge.exeでいいわけで
独学でやってるなら入門書に書いてある通りにやればいいだけなんだが、
誰かに指示されてるならそいつに聞けよ。
407 :
デフォルトの名無しさん:2010/02/02(火) 10:43:09
test
スレ違いだったらすいません。
一週間くらい前からプログラミングに興味を持ち、C++2008をダウンロードして
やっているのですが、初めてのプログラミングはこのソフトからでいいのでしょうか?
ほかにもっとわかりやすいのがありました教えて欲しいのですが・・・
とりあえずそれでいいっていうか「何を作りたいか」目的がはっきりしてた方が良い
「そのために何が必要か」ってアプローチが結果的に早道になると思う
から、って言うけど別ので初めて後からVC++を使う気か?
どうせ使う気があるなら最初からVC++で慣れればいいじゃん
>>408 いやC#はやめとけ
未来が暗い。
C++かC言語にしとけ。
>>409 >>410 >>411 >>412 返答ありがとうございます。
このままC++を使うことにしました。
411さん、自分にはあまりC#はあってないと思ったのでC++にします。
せっかく返答していただいたのに申し訳ありません。
皆さんありがとうございました。
でもよ、VC++2008を無料で落としても、
初心者がWinのプログラムを始めるには.Netしかないだろ?
そうするとCLIでやんなきゃならん。
だったらC#でいいんじゃないか?
まずはプログラミングというものに慣れてからC++やらないと
挫折するよ
416 :
412:2010/02/09(火) 20:27:48
C#はやめた方が良いだろう。
>>415の言うことは大抵は真実。
たまに才能があるヤツは別だけど、
いきなりやると嫌になるだけな気がするんだぜ。
C#は便利すぎて他に移るのが苦痛になるから
何かと併用するならいいけど、それから始めるのはまずいかもね。
> C#は便利すぎて他に移るのが苦痛になる
そうか?
C#よりP言語系のが便利だし、
就職できるかどうかの勝負なら便利言語以外も習得
するようになるだろう。
まああれだ、要するに
P言語(Python, Pascal, PHP)かC言語の
どっちか両極端からやるのがオススメ。
VS2005で
あるスタティックライブラリの一部を利用するスタティックライブラリを作成したいのですが
どのように設定すればいいでしょうか
逆に1個もライブラリ使わずに作る方がむずかしい
422 :
デフォルトの名無しさん:2010/02/11(木) 22:47:40
すみませんvc++2005を使っているのですが
スタティックライブラリのプロジェクトでcpp内でreplacement newが使えないのです
#include <new>も書いています.
どなたか解決法をご存じの方がいましたらよろしくお願いします
replacement new??
おっと re はいりません
すみません
使えないってどういう状態を指してるのかわからないけど、変なヘッダとか入れてるんじゃないか。
10行くらいのnewヘッダだけ使った最小コードでも使えないの?
VC++2005Academicだとこんなコードで動くけどさ。
http://codepad.org/vqalFgq7 #include <new>
#include <iostream>
int main() {
const int ARRAYSIZE = 100;
int *parray = new int[ARRAYSIZE];
for (int i = 0; i < ARRAYSIZE; i++)
new (parray + i) int(i);
for (int i = 0; i < ARRAYSIZE; i++)
std::cout << parray[i] << std::endl;
delete [] parray;
return 0;
}
自分の環境でもそのコードで動きました
チェックしてみます.ありがとうございます.
ご指摘の通りメモリリーク検出用のライブラリを使用していました...
ありがとうございます
今でもTCHARって使ったほうがいいのでしょうか?
今さら9x対応にするメリットもないし、書き方が冗長になるし
無駄な努力のように思えてきました。
皆さんの見解はどうですか?
ライブラリとして提供するなら考慮してもいい
自分だけで完結するならいらんだろう
なるほど、やはりその程度のものなんですね。
よくわかりました、ありがとうございます。
VN.NET質問スレの方に誘導して戴きました。
Visual C++ .NET環境で下のようにIMEモードをNoControlにしているのですが、自作アプリケーションで
全角にした後に他のウィンドウにフォーカスを移して、また戻すと半角に戻ってしまっています。
ユーザーが設定した情報をフォーカスを変えても保持するようにするにはどうしたら良いのでしょうか?
よろしくお願いします。
this->ImeMode = System::Windows::Forms::ImeMode::NoControl;
432 :
431:2010/02/15(月) 03:27:39
>>431 あなたが使ってるのはC++ではなくC++/CLIという別の言語です。
C++/CLIには専用のスレもありますが、その手の質問はC++/CLIスレでも嫌われるので
C#かVB.NETの書き方を覚えてそっちで聞いた方がいいと思います。全く同じなので。
434 :
431:2010/02/15(月) 16:38:22
>>433 回答ありがとうございます。このスレの方が良いと誘導されたのですが、
VB.NETスレに戻って質問した方が良いと言う事でしょうか?
悪さっつーか、他でIMEコントロールされたら返ってきたときに変わるわな
C++/CLIの罠はえげつないな
中途半端にWinFormsのデザイナなんか付けるから勘違いするんだよな
相互運用専用の言語なのでそんなものが必要になるようなら使い方が間違ってる
Win7 64bitでVC++2008EEを使ってるんですが、コード入力中に一瞬フリーズしたようになって1、2秒ですぐ入力を受け付けるようになるんですけど何ででしょうか
XP32bitを使っていたときも同じ症状があったんですけど、フリーズするタイミングがいつもバラバラでなにが原因なのかよくわからないんですけど・・・
>>439 オートセーブみたいな機能([ツール]→[オプション]→[環境]→[自動バックアップ])
>>440 レスありがとうございます。
保存のたびに一瞬止まってたんですね
442 :
デフォルトの名無しさん:2010/02/17(水) 14:59:22
VisualC++2008にて、iTunesCOMWindowsSDKを使ってプログラミングしようと思っていて、
そのためにはiTunes 1.1 Type Libraryを参照に追加しなければならないようなのですが、
この参照に追加する方法が分かりません。
どのようにすれば設定できるのでしょうか?
単にプロジェクトの参照に入れるだけで簡単に使えるのはC#かVBの話
C++/CLIならプロジェクト右クリックで参照...から
C++なら付属のhとc組み込む
445 :
442:2010/02/17(水) 15:30:05
C#での方法について解説したページを見てしまっていたようです。
どうもありがとうございました。
Visual C++ 2008 ExpressEditionを使っているのですが、挿入メニューが
どうしても見つかりません。
リソースを挿入したいのですが…。
エディションの制約によりリソースの編集は出来ないです
まあハック的手法を使えばリソース挿入できない事もないけどVCだけでは出来ない
>>446 rcを手書きか、 RcEdit使いなはれ
449 :
デフォルトの名無しさん:2010/02/19(金) 17:05:34
Visual C++ 2008 ExpressEditionでプログラムのデバッグをしていて、
途中でデバッグの停止をしたらコマンドプロンプトのウィンドウが残ったままになってしまいました。
このウィンドウを消したいのですが、×ボタンを押しても、右クリックで閉じるを選んでも消えてくれません。
どうすれば消すことが出来るのでしょうか。
タスクマネージャで抹殺する
タスクマネージャを見てもcmd.exeがありませんでした。
待つ
windowsって再起動したら大抵直るよね。
再起動しようとしたところ、このコマンドプロンプトのウィンドウだけが残って再起動できなかったので、
仕方なく電源ボタン長押しで強制的に切ってきました。
途中で送信してしまった・・・
パソコンを起動して、再びデバッグ中に停止したら同じ症状に陥りました。
再起動以外の方法で何とかウィンドウを消せないでしょうか。
>>455 うちはならない
VC++を再インストールしてみたら?
>>455 多分メニューからデバッグの停止
CTRL+Cで停止するとそうなったような
Ctrl + Alt + Break で終了出来る
Visual C++再インストールしてみます。
ありがとうございました。
デバッグ開始後すぐにVC++が強制終了してしまう場合は何が原因なんでしょうか?
>>461 そんな特殊な状況、他に発生するのか?w
463 :
デフォルトの名無しさん:2010/02/20(土) 03:23:25
vc++2008インストしたんだけど
ウィンドウにボタン配置したりする画面
あれどうやって出すの?
プロジェクト作成するときに、CLRのフォームアプリケーションを選択するとできると思うよ。
出来ますた
素早い回答ありがとうございます
466 :
デフォルトの名無しさん:2010/02/20(土) 11:17:58
初心者用のCの教科書(林さんのp.294)を読んで勉強してます。
分からないことがあるので、どうか教えて下さい。
main関数を、int main(int argc, char *argv[])
のように、引数対応型にして、
コマンドラインから引数を渡すのではなく、
VC++のGUI上で引数を渡してビルドできるようになりたいです。
よろしければ、どうすれば良いか教えて下さい。
ちなみに、コマンドプロンプトではソースファイルをコンパイルできるんですが
GUIでは、何故かコンパイルできません。
ソリューションのプロパティ→構成プロパティ→デバッグ→コマンド引数
で、デバッグ実行時のコマンドライン引数を与えることはできるけど。
そういうことはGUIでやると、かえって手間がかかると思うが
まったくゼロから始める初心者なんんですけど本屋に行ったらVisual C++とか
C++とか、いろんな本が売ってるんですけど、C++って書いてある本を買えば
まちがいないですか?
>>469 初心者向けとか、特定のコンパイラ向けとかあるから、目的にかなったのを
選択しないとだめ。
>>470 いろんなのが出ててまよってました。ありがとうございます。
>>469 間違いだらけです
初心者向けとか入門書とかはすぐ使えなくなるから買っちゃだめ
引数がめちゃくちゃ多くて
毎回入力するのが面倒なら
あらかじめ設定しとくのも
悪くはないと思うんだけど
普通はテストのために引数
変えながら試すはずだから
もしそういうことを自動で
やりたいなら敢えてテスト
用のプログラムを書いてね
enumって何て読むの?
C++スレでどうぞ。
480 :
479:2010/02/25(木) 00:34:03
追記です。
ハードディスク内をmidl.exeで検索すると2種類でてきたので
VC\binにつっこんだらエラーが
error MIDL2398 : cannot execute MIDL engine
に変わりました。
これもmidlを起動できないとのメッセージですが英語になりました。
wankumaに行って作った本人に直接聞けよ
482 :
デフォルトの名無しさん:2010/02/26(金) 21:37:54
はじめまして。ソフトバンクの「基礎からのC」という本の通りにやってるのですが
下のようになって進めません。
Setting environment for using Microsoft Visual Studio 2008 x86 tools.
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC>cd /D C:\c-lang\chapter03
C:\c-lang\chapter03>cl hello.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
hello.c
hello.c(1) : fatal error C1021: プリプロセッサ コマンド 'inclube' が無効です。
C:\c-lang\chapter03>
どうすればいいか教えてくれたらうれしいです。
visual studio 2008を使ってます。
いんくるーべじゃなくていんくるーどだよお
484 :
482:2010/02/26(金) 22:24:40
いや本当にinclubeってあったんですけど・・・?
487 :
482:2010/02/26(金) 22:29:30
すいませんホント始めたばっかりなのでそれもどうすればいいか・・・orz
inclube → include に書き換える
489 :
482:2010/02/26(金) 22:38:36
その場所はどうやってもなんにもできません
書き換えようとしてもけすことも書くことも無理です
hello.c を、inclube で検索して、include に書き換える
hello.cってソースファイルに
#inclube って書いてあんだろ?
それを書き換える
何にもできないのはなぜだ?
492 :
482:2010/02/26(金) 22:45:17
すいませんできました。みなさんありがとうございます。いらいらさせてごめんなさい。
Windowsべったりのプログラムを書いていて、
ファイル名から始まって変数名の付け方等悩んでいます。
別に拘りがあるわけではないので、何か適当な規則に従ってみようと思っているのですが、
VC++についてくるサンプルコード等参考にしつつコードを書いているのですが、
サンプルコード間でも割と記法がばらついており、さてどんな形で統一しようかと考え込んでしまいます。
MSDN等にコーディング規約に関する記事などありますでしょうか。
或いはまとまった大きめのコード(色んな記法を見れるコード)などあれば教えて頂けると幸いです。
好きな宗派を選べばいいよ
>>494 どっぷりWindowsプログラムなので、MS教を信奉しようと思っているのですが、
.NET周辺は
MS自身も宗派替えをしてる感もあり、宗派選びの参考となる宗教書は無いかと思いまして。
>>495 どうもありがとうございます。そのスレは確認したのですが、
適当な名称、単語についてのアドバイスを貰うスレで、
>>命名規則や設計の善し悪しについて議論するのは基本的に禁止
ということでしたので、避けてこちらで相談させて貰いました。
スレチでしたら申し訳ない。
498 :
デフォルトの名無しさん:2010/02/27(土) 22:09:44
最近始めた者ですがコメントについての質問です。
ソースにコメントを書いているのに実行したら結果にそのコメントらしきものが
見当たりません。
コメントの意味って何なのですか?お願いします。
>>498 ・他の人が見てわかりやすい
・後で見返したときにどういうことしてるかわかる
・メモ程度に忘れないようにかいとく
500 :
498:2010/02/27(土) 22:30:59
ありがとうございます。
要するにソースだけであって実行には関係ないものなんですね。
よくわかりました。
最近始めた者ですがソースについての質問です。
ソースを書いているのに実行したら結果にソースらしきものが
見当たりません。
ソースの意味って何なのですか?お願いします。
>>501 ・人間が見てわかりやすい
・後で見返したときにどういうことしてるかわかる
・プログラムの動作をCPUが判るレベルに細かく分割してかいとく
503 :
デフォルトの名無しさん:2010/02/28(日) 21:18:31
ちょっと%fについて質問です
printf("整数の定数=%f \n", 10);
では正しく動作しないんですよね?なのに
printf("加算の表示=%f \n", 55.0 + 10);
の10は整数なのに正しく動作します
そこんとことよく分からんのです
答えてくれたら有難いです
55.0 + 10が整数じゃないから
505 :
デフォルトの名無しさん:2010/02/28(日) 21:27:37
そりゃ式の評価値の問題だろ?
C言語スレじゃないからどうでもいいけど
「正しく動作しない」じゃなくて「誰かが思ってる通りに動作しない」だろ
じゃなきゃコンパイラに欠陥があるってことか
欠陥があるのはいつだってプログラマの脳みそです
508 :
デフォルトの名無しさん:2010/03/02(火) 21:06:20
構造体配列がよくわかりません、教えてください
for(j=0;j<6;j++){chosen[j] = {"abt","abc","abc",0,0,101};}←まずこれがコンパイルできません、一つ一つ丁寧に入れないといけないのでしょうか?ちなみにVisual C++ 2008です
そしてもう一つの関数内でchosen[random()%5].nameというふうに使いたいから
namespace ホゲ {
using namespace System;
using namespace System::Drawing;
struct choosedata { メンバ};
int random ;
struct choosedata chosen[6];
と一番上で宣言してるのですが、privateとかC++のことが良くわかってなくてフォームアプリケーションのヘッダに書いてるのですがここはおかしいですか?
sscanf(data,"%s ; %s ; %s ; %d ; %d ; %d",&chosen[5].type,&chosen[5].name,&chosen[5].answer,&chosen[5].right,&chosen[5].times,&chosen[5].rate);
それとここで%sの文字列がちゃんと入らないのですが何がおかしいのでしょうか?
よろしくおねがいします!
C言語の事詳しく教えてください!
511 :
デフォルトの名無しさん:2010/03/03(水) 00:15:26
デバッグの時には乱数は変わらないのでしょうか?
srand((unsigned int)time(0));
a = (int)((rand() / ((double)RAND_MAX+1.0f)) * 10);
をしましたがデバッグを開始にしてもデバッグなしで開始にしても同じ値しか入りません
>>511 ちょっとVC8で試してみたけどsrandの実装がショボイみたいだね。
一番最初に呼ぶrandがtimeと比例するような近い値を返してきてるから結果的に同じ値がaに入ることになる。
改善するにはtimeで得た値をsrandに渡す前にCRCとか使ってかき混ぜるのがいいと思う。
最初の数回のrandを捨てる方が簡単か。そのうち内部状態が混ざってくる。
514 :
デフォルトの名無しさん:2010/03/03(水) 10:56:03
VS2010βをダウンロードしてみました。
stdafx.hを使用したいのですが、プロジェクトを作成する時にMFCを選択しないと使用出来ないのでしょうか?
Win32の空プロジェクトのような、スッキリしたプロジェクトで使用することはできませんか?
よろしくお願いします。
βは知らんけど、たぶん今までと同じだろ
srandの実装がショボイと言うと
C言語の仕様に対してVC++のライブラリのsrandの実装がショボイと言ってるように聞こえるな
time()よりGetTickCount()渡しとけよ
518 :
514:2010/03/03(水) 12:05:12
すいません、今までを知らないので教えてください。
βを落とした理由が、ExpressではMFCが使えないとのことでしたので。
>>518 プリコンパイルヘッダーを使用する設定にすればいいんじゃね?
なんだ結局MFC使うのか
うかつに回答しなくて良かった
使わないようにしたいと思ってる人が大多数だから
「stdafx.h 使わない」で検索すれば一発で見つかる
522 :
デフォルトの名無しさん:2010/03/03(水) 15:00:02
>>503 まだ間に合うかな・・・
printf("整数の定数=%f \n", 10);
コンパイラは10をint型で扱うのね。%fはfloat型だから一致してないわけで正しく表示させません。
printf("整数の定数=%f \n", 55.0+10);
これは55.0がfloat型なのでそれに10足したら65.0になるわけで%fで正しく表示されます。
55.0と10を足したらfloatになる・・・のはC言語の暗黙の型変換というヤツです。
コレに対して、10をfloatであると明示的に書いてやれば%fで正しく表示されます。
printf("整数の定数=%f \n", 10F);
printf("整数の定数=%f \n", (float)10);
printf("整数の定数=%f \n", 10.0);
etc
ぐあっ
printf("整数の定数=%f \n", 10F);
では無く
printf("整数の定数=%f \n", 10.0F);
でした
525 :
デフォルトの名無しさん:2010/03/03(水) 18:11:12
ファイルのある一行を書き換えたいのでr+で開いてその行のファイルポインタをコピーしておこうとしているのですが
while(fget(fp,,))ループのあるタイミングで*fpc = *fpとしてfpritf(fpc,"",)としようとすると、*fpc = *fpの行で「オブジェクト参照がオブジェクト インスタンスに設定されていません」
のエラーが出ます
fpc=fpとして同じようにすると、while(fget(fp,,))で最後まで回ってるからかfpritf(fpc)としても最後に書き込まれてしまいます
どうすれば良いのでしょうか?
ftell()とfseek()組み合わせるとか
って上書きしかできんから行の長さかえられんけどいいのか
527 :
デフォルトの名無しさん:2010/03/03(水) 18:25:04
ありがとうございます
行の長さが変えられないって数字だとしたら桁が変えられないってことですか?
ファイルを2個作るのが普通なのでしょうか?
ファイル1を開く、ある行を計算して保持しておく、ファイル2をwで開く、その行以外はコピー、その行に来た時保持しておいた値を書く
次また同じ操作をしたい時はファイル2をrで開いてファイル1をwで開く、というふうにするのですか?
まあそんな感じ。
通常はテンポラリファイル作るかオンメモリでやるかってとこかなあ
529 :
デフォルトの名無しさん:2010/03/03(水) 18:39:29
ありがとやっしたー!
ちなみに
フォームアプリケーションを作るのに
C#で作るのと
C++でフォームアプリケーションから作るのと
C++で空のプロジェクトから作るのと
動作の軽さは結構違うのどうか教えてください!
やなこった
531 :
デフォルトの名無しさん:2010/03/03(水) 18:54:14
そこをなんとか!
プログラムによっても実行する環境によっても違うし、
使う人によっても感じ方が違うだろうから
本人が実際につくって試してみるしかない。
>>529 素人が作るなら大して変わらないし、パソコンは高性能に
なってきてるから、よっぽどのことがない限り、どれもたいして
重くならない、とも言える。
おお
そもそも、C++フォームアプリケーションが、CLRのあれのことだったら、
C#でもC++でも.NET Frameworkで動くのだからどっちで書いても同じというのが答えだ。
時間はC++で書くと3倍かかるけどな
printfでそんなもの表示して何がうれしいんだろうね?
Hello Worldがどうしたって?
Visual C++ 2008 Express Editionです。
コンソールアプリケーションを作っているのですが、
デバッグを使っていて、ブレークポイントに達した時にデバッグ停止すると、何故か
コンソールが残ったままになります。Windows終了時も消すことが出来ず、
電源を強制的に切らなければなりません。
どうすれば直せますか?
541 :
デフォルトの名無しさん:2010/03/04(木) 03:38:33
ラベルに一行が長いテキストを入れると右端が振り切れてしまうのですが、自動改行は無いのでしょうか?ググっても見つけられませんでした
ラベルって何だ?
もしかして自分用語ならググっても見つけらないだろ
>>540 ほっときゃいいじゃん、いつかは電源切るんだし。
つかVS上でシフトF5でデバッグ中止しても残るの?
>>541 環境書いた方がいいよ、formのLabelだろ?
もともと自動改行するよ、AutoSize をfalseにしてみては。
まあワードラップの問題も出るだろうけど
VC2008を使用している際に、デバッグビルドの標準設定で発生する症状なのですが、
cppファイル上に#include "stdafx.h"が存在しない場合、
warning C4627及びfatal error C1010(プリコンパイルヘッダが見つからない)
が発生し、ビルドに失敗します。
これだけなら各ファイルでstdafx.hをインクルードしてやれば良い話なのですが、
フォルダ分けを行っている場合、例えば#include "../stdafx.h"というような
形でインクルードしている場合にも同様のエラーでビルドに失敗します。
パスが存在しないにも関わらず、#include "stdafx.h"も加えてやると
デバッグ設定ではなんとビルドが通るのですが、
リリース設定にすると当然ながらエラーが出てはねられます。
とりあえずプリプロセッサを使って宣言を切り替えているのですが、気持ち悪いです。
何か適切な対処の方法はあるでしょうか。
>>545 プロジェクトで右クリックしてプロパティ出して
左上の構成のとこを「すべての構成」にして← ここ重要(Debug Releaseで2回設定してもいいけど)
構成プロパティのC/C++のプリコンパイル済みヘッダーのとこの
プリコンパイル済みヘッダーの作成/使用 を「使用しない」にする
もしくは、空のstdafx.hをそこに置いといて両方インクルードしてしまえばいい
548 :
545:2010/03/04(木) 15:56:16
>>546 プリコンパイル済みヘッダは使ってるんです。規模が大きくなってくると恩恵も大きいですし。
ちゃんと明記するべきでしたね、すみません。
>>547 あー。確かに。ちょっと気持ち悪いですけれど、仕方ないかなぁ。どうもありがとうございます。
使ってるなら空じゃまずいのではw
上のstdafx.hの中で、別のstdafx.hをincludeするのがいいのかな
つーか別のやつをstdafx.hという名前以外にしてしまえばいいのでは
質問する前にMSDNぐらい読んどけ
551 :
デフォルトの名無しさん:2010/03/04(木) 17:41:49
>>544 ありがとうございましたできました
Visual C++なので環境はみんな一緒かと思ってました
昨日はパネルの上にラベルを乗せてて、Autosizeをfalseにしてもできなかったような気がしてたのですけれども
>>551 falseにした上で高さのリサイズした?
553 :
デフォルトの名無しさん:2010/03/04(木) 17:54:16
>>552 あ、そういえば昨日はしてなかったような気がしまつ
すいません
#ifdefとか#ifとかの使い方教えてください
使うとどうなるのかも教えてください
C言語初心者スレ行き
556 :
デフォルトの名無しさん:2010/03/04(木) 19:23:53
そんなこと言わずに教えてくださいよ
557 :
デフォルトの名無しさん:2010/03/04(木) 19:27:55
IPAの報告によればこの資格の最年少合格者は13歳だってなw
?
>>554 コンパイルされるコードを切り替えます。
#ifdef _DEBUG
デバックモードのときだけコンパイルされる
#endif
とか、
#ifdef _DEBUG
デバックモードのときだけコンパイルされる
#else
デバックモード以外のときコンパイルされる
#endif
などなど、何か事情があってコンパイルを切り替えたいときに使います。
また、#ifは
#if 0
ここはコンパイルされません。
#endif
という感じでとりあえずコンパイルしない・・・という感じでよく使います。
>>559 デバックモードってどういうメリットがあるんですか?
デバックしやすい
>>560 デバック時で言うと一般的なのはログとかですかねー
TRACE使ってれてば問題ないですが。MFCが要るんでしたっけ?
#ifdef _DEBUG
OutPutDebugString(msg)
#endif
Yahooでググれ
>>562 TRACEは普通にprintfと同じです。
TRACE("デバック - i=%d",i);
で出力ウィンドウに出ます。
また、リリースモードでは出力されません。
わずかとは言え負荷の観点からも
リリースモードではログ出力は避けたほうがいいですね。
デバックモードについて全然理解してないことはわかった
567 :
デフォルトの名無しさん:2010/03/05(金) 16:20:16
this->panel1->MouseWheel += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::panel1_MouseWheel);
private: System::Void panel1_MouseWheel(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)
{label1->Text="lghol";panel1->Invalidate();}
マウスでスクロールできるようにしたいのでまずはホイールイベントを検出したいのですが、これを追加するだけでは何が足りないのでしょうか?
VC++です、それと
case 数字:
{srand((unsigned int)time(0));
int rand = (int)(rand()%2);処理〜}
のrandに0しか入らないのですが何故でしょうか?
すませんVC++2008ExpressEditionです
570 :
デフォルトの名無しさん:2010/03/05(金) 17:40:22
>>569 ありがとうございます
種のことはよくわかりませんが序盤で1回srand()してrand()して4で割った余りで場合わけしてるのですが、その中でまたrand()を%2したいので
srand()をしないとrand()は同じ数が出ると聞いたので
(今そうなっているわけじゃないですが)4で割って2余る中でまたrand()を呼んで%2しても0に決まってるので、確率2分の1をsrand()せずにrand()%2では不味いので毎回呼ぶのかなあと思ったのですが大丈夫なのでしょうか?
ちなみに一行目はInitializeComponent(void)の中でパネルがいっぱい設定されてるところの最後に入れています
this->panel1->AutoScroll = true;
this->panel1->Controls->Add(this->pictureBox1);
this->panel1->Controls->Add(this->label1);
this->panel1->Font = (gcnew System::Drawing::Font(L"MS UI Gothic", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(128)));
this->panel1->Location = System::Drawing::Point(16, 1);
this->panel1->Name = L"panel1";
this->panel1->Size = System::Drawing::Size(922, 421);
this->panel1->TabIndex = 3;
this->panel1->MouseWheel += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::panel1_MouseWheel);
その後パネルはthis->panel1->Location = System::Drawing::Point(16, 1);
this->panel1->Size = System::Drawing::Size(933, 326);
しかいじってません(`;ω;´)
>>570 MouseWheelはコントロールがフォーカスを持ってる時しか来ないのね。
panelは普通フォーカスを持たないのでこない。
panel1->Focus()をすれば来るんだけど、別のコントロールで入力したりするとまた来なくなる。
MouseWheelはForm1でとるようにしてはどうだろう。this->MouseWheel += 〜〜 と。
>srand()をしないとrand()は同じ数が出ると聞いたので
それは、srand()を全くしないと最初にsrand(1)をしたのと同じになる、という意味。
572 :
デフォルトの名無しさん:2010/03/05(金) 18:43:34
なるほど!ありがとうございました!
あ、InitializeComponent()の中は基本的には直接いじらない方がいいよ。
フォームのデザイナでいじったことが書かれるところだから、デザイナが解釈できないことを
書いてしまうとデザイナでいじった時に消えてしまう。
FormのコンストラクタでInitializeComponent()を呼んだ下に書きましょう。
574 :
デフォルトの名無しさん:2010/03/05(金) 18:49:33
(`;ω;´)できまてん
TextBoxの|がチカチカしてるのですがそのせいでしょうか?
575 :
デフォルトの名無しさん:2010/03/05(金) 18:50:36
576 :
デフォルトの名無しさん:2010/03/05(金) 19:21:57
マジキチ
this->MouseWheel += 〜〜 しにても
this->label1->MouseWheel += 〜〜 にしてもうんともすんともしねえ
んー、なんだろう。
アプリはアクティブになってる?
578 :
デフォルトの名無しさん:2010/03/05(金) 20:46:57
テキストボックスー>にしたらできましたのでFocusがFormになってなかったぽいです
イニシャライズの後にthis->Focus();してもテキストがチカチカしたままなのですがなぜでしょうか?
Form1でActiveControl = nullptr;
みたいなことやってみて
フォーム内のテキストボックスにフォーカスがあるならフォームにもMouseWheelはくるはず。
パネル内のテキストボックスにフォーカスがあるならパネルにもMouseWheelはくる。
フォームの上にマウスカーソルがあっても、フォームのウィンドウがアクティブでないとこないよ。
581 :
デフォルトの名無しさん:2010/03/05(金) 21:05:56
イニシャライズの最後でthis->ActiveControl = nullptr;してその後this->Focus();とかやってみましたが何もかわりませんでした、多分
582 :
デフォルトの名無しさん:2010/03/05(金) 21:16:55
え゛ー…
this->textBox1->MouseWheel += gcnew S OK
this->それ以外 ×
みたいな感じです
イニシャライズ→関数→ピクチャーボックス消し、パネル、テキストボックスサイズ書き換え ぐらいしかフォームはいじってないつもりなんですが…
イニシャライズの中はこれです。(順番とか関係あるのか知りません)
this->textBox1 = (gcnew System::Windows::Forms::TextBox());
this->button1 = (gcnew System::Windows::Forms::Button());
this->panel1 = (gcnew System::Windows::Forms::Panel());
this->pictureBox1 = (gcnew System::Windows::Forms::PictureBox());
this->label1 = (gcnew System::Windows::Forms::Label());
this->panel1->SuspendLayout();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox1))->BeginInit();
this->SuspendLayout();
//
// textBox1
this->textBox1->Font = (gcnew System::Drawing::Font(L"MS UI Gothic", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(128)));
this->textBox1->Location = System::Drawing::Point(16, 428);
this->textBox1->Multiline = true;
this->textBox1->Name = L"textBox1";
this->textBox1->Size = System::Drawing::Size(922, 109);
this->textBox1->TabIndex = 1;
// button1
this->button1->Location = System::Drawing::Point(786, 543);
this->button1->Name = L"button1";
this->button1->Size = System::Drawing::Size(152, 69);
this->button1->TabIndex = 2;
this->button1->Text = L"OK";
this->button1->UseVisualStyleBackColor = true;
this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click_1);
583 :
デフォルトの名無しさん:2010/03/05(金) 21:18:17
this->panel1->AutoScroll = true;
this->panel1->Controls->Add(this->pictureBox1);
this->panel1->Controls->Add(this->label1);
this->panel1->Font = (gcnew System::Drawing::Font(L"MS UI Gothic", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(128)));
this->panel1->Location = System::Drawing::Point(16, 1);
this->panel1->Name = L"panel1";
this->panel1->Size = System::Drawing::Size(922, 421);
this->panel1->TabIndex = 3;
// pictureBox1
this->pictureBox1->Location = System::Drawing::Point(0, 0);
this->pictureBox1->Name = L"pictureBox1";
this->pictureBox1->Size = System::Drawing::Size(922, 396);
this->pictureBox1->TabIndex = 1;
this->pictureBox1->TabStop = false;
this->pictureBox1->Click += gcnew System::EventHandler(this, &Form1::pictureBox1_Click);
this->label1->Location = System::Drawing::Point(-4, 0);
this->label1->Name = L"label1";
this->label1->Size = System::Drawing::Size(882, 560);
this->label1->TabIndex = 0;
this->label1->Text = L"label1";
this->ClientSize = System::Drawing::Size(950, 624);
this->Controls->Add(this->panel1);
this->Controls->Add(this->button1);
this->Controls->Add(this->textBox1);
this->Name = L"Form1";
this->panel1->ResumeLayout(false);
(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox1))->EndInit();
this->ResumeLayout(false);
this->PerformLayout();
585 :
デフォルトの名無しさん:2010/03/06(土) 02:56:59
ありがとうございました
見比べてみます!
586 :
デフォルトの名無しさん:2010/03/06(土) 04:27:18
もう無理ですほんとうにありがとうございました
後はチャーをストリーム^にしてオールファイル読み込んでるのと
何回もフォーム弄りまくってバグってるくらいしか思いつきません
久々にVCで組む事になって昔よく使ってた
VC++超初心者のホームページに行ってみたらなくなってた!
100回くらい質問して200回くらい回答してたのに寂しいぜ・・・
どっかに過去ログないかな?
589 :
デフォルトの名無しさん:2010/03/07(日) 10:49:43
VC++2008でプロジェクトなどを作成せずにすでにあるプログラムファイルを開いて
実行することはできませんか?プログラムを開くことはできるんですが、
デバッグなどができません。どうか教えてください。
やだ
デバッグできるの確実だけど
プロジェクトなどを作成せずにとかいらん条件つけられると答えようがない。
>>589 プロジェクト作成したときと同じ方法でデバッグできるだろ。
593 :
デフォルトの名無しさん:2010/03/07(日) 22:54:38
条件演算子についての質問です。
ソース
int a = 10, b =5;
printf("比較の結果、小さい値は %d \n",
a < b ? a : b);
実行例
比較の結果、小さい値は 5
となりました。実行した時、どうして小さい値をちゃんと表わせたんでしょうか?
「比較の結果、小さい値は」というのは人間が見やすいようにするための物なんじゃ
ないんでしたっけ。小さい値を出すためのプログラミング言語はどれなんでしょうか?
意味分からない質問ですいません。お願いします
コメントと文字列をごっちゃにしているだけのような気がする。
>>593 int a = 10, b =5;
printf("%d\n", a < b ? a : b);
>>593 int a = 10, b =5;
printf("比較の結果、小さい値は 5 \n")
>>593 int a = 10, b =5;
printf("Hello, World!!! \n")
>>593 int a = 10, b =5;
printf("お前は %d だ。 %d になるんだ。\n",
a < b ? a : b);
a<b?a:b
これは
aより b が大きいなら(b より a が小さいなら)、a を値として戻せ、そうでないなら b を戻せ。
10より 5 が大きいなら(5 より 10 が小さいなら)、10 を値として戻せ、そうでないなら 5 を戻せ。
>>593 入門書に載ってるコードでも丸写ししてるのか?
入門者に対してずいぶん不親切な書き方だな
C言語の勉強中だったらC言語のスレに行った方がいい
>>589 コマンドプロンプト:\>cl /EHsc hello.cpp
なんたら・・・コンパイル成功。
コマンドプロンプト:\>hello
デバッグしてちょうだいよ。
プログラムファイルって普通は実行ファイルのことだから
ソース持ってないexeをデバッグしたいんじゃないのか?
605 :
デフォルトの名無しさん:2010/03/08(月) 17:08:52
リソー^スを編集しようとしたら
リソース編集はSKUではサポートされていません
と出たんだがどうしたらいいの?
あざす
608 :
デフォルトの名無しさん:2010/03/08(月) 19:38:53
2008をはじめたものです。
#include <windows.h>
#include <mmsystem.h>
#include "resource.h"
#pragma once
namespace hello2 {
…
}
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
PlaySound("C:\\***.wav",NULL,SND_FILENAME | SND_ASYNC);
}
};
}
音を出したいのですがでません、リンカでwinmmは追加済みです。
PlaySound関数は、アプリケーションがロードされたディレクトリ、カレントディレクトリ、
Windowsのシステムディレクトリ、Windowsディレクトリ、環境変数PATHに記述されている各ディレクトリ、
ネットワークにマップされているディレクトリから、サウンドファイルを検索します。
610 :
デフォルトの名無しさん:2010/03/09(火) 06:20:49
>>609 ありがとうございます。
それプラス、「Unicode文字セットを使用する」から
「マルチバイト文字セットを使用する」に変更で音がでました。
この違いは何なんでしょうか?
つーかUnicodeの時コンパイル通ったのか?
文字列にTEXTマクロ付けないとコンパイル通らないんだがどうにかできない?
別にTEXTマクロなくたって通る
代わりにL""にする
Qt使い始めたらL()とかTEXT()とかwshogehogeとかmbcshogehogeとか訳判らんもんに振り回されずに済むようになっためっちゃはっぴー
TEXTマクロ使うのは同じソースをwindows98みたいな
古いOS用にコンパイルし直すのが楽なようにやってるだけで
C言語の入門書にあるようなL()とかTEXT()とか全然使ってないソースも
問題なくコンパイルできるよ
だけど MbcstringToWideChar とか使いにくいぜ
ちゃんとW書けよ
regsvr 32 でDLL登録したいけど「DllRegisterServerエントリポイントが見つかりません」となります。
VC++ 2008Expressです。
Cppに extern "C" HRESULT __stdcall DllRegisterServer()
.hに extern"C" HRESULT __stdcall DllRegisterServer(void);
と宣言しています。
DllRegisterServerエントリポイントが見つかりません の検索結果 約 401 件
中身ないじゃん
623 :
620:2010/03/12(金) 21:17:38
中身は
HRESULT __stdcall DllRegisterServer()
{
HKEY hkResult; // キーのハンドル
DWORD dwDisposition; // 処理結果を受け取る
LONG lResult;
lResult = ::RegCreateKeyEx(HKEY_CLASSES_ROOT, "CLSID\\{99FFFFF-AAA3-1113-ABCD-000000000099}\\ProgID", 0,0 ,
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkResult, &dwDisposition);
if( lResult == ERROR_SUCCESS )
{
char strCity[128] = "JISAKUdllver1";
::RegSetValueEx(hkResult, "", 0, REG_SZ, (CONST BYTE*)(LPCTSTR)strCity,strlen(strCity) + 1);
};
::RegCloseKey(hkResult);
HKEY ppResult; // キーのハンドル
DWORD ppk; // 処理結果を受け取る
LONG ssResult;
ssResult = ::RegCreateKeyEx(HKEY_CLASSES_ROOT, "CLSID\\{99FFFFF-AAA3-1113-ABCD-000000000099}\\InprocServer32", 0,0 ,
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &ppResult, &ppk);
if( ssResult == ERROR_SUCCESS )
{
char rCity[128] = "D:\\マイドキュメント\\新しいフォルダ\\a.dll";
::RegSetValueEx(ppResult, "", 0, REG_SZ, (CONST BYTE*)(LPCTSTR)rCity, strlen(rCity) + 1);
};
::RegCloseKey(ppResult);
return S_OK;
}
DllRegisterServer エントリポイント の検索結果 約 844 件
判っているひとのみ回答してください
626 :
620:2010/03/12(金) 21:43:22
>>622 DllRegisterServerが読み込まれてさえないのではと思いまして
あーリンクし忘れてんのか
>>627 すみません、調べてみたけど解りません。プロジェクトプロパディのリンクのことでしょうか?
DLL作るんならDependency WalkerぐらいDLしておけ
そしてDEFファイル渡せ
VC++ 2005, Win32 アプリケーションについて質問です。
タスクマネージャの画面のように、メニューバーの下に一本セパレーターを
表示するにはどうすれば良いでしょうか?
ツールボックスにそれらしいコントロールが見当たらないのですが…。
LineTo()を使って自前で描く。
コントロールでもできるよ
633 :
630:2010/03/14(日) 11:00:31
>>631 LineTo() を使ったことがないので、調べてみます。
>>632 どのコントロールでしょうか?
いわゆるstaticコントロールな
636 :
630:2010/03/14(日) 12:09:37
>>634 >>635 Static Text の Height を 1 に、Static Edge を True にすることで実現できました。
ありがとうございました。
すみません、新規プロジェクト作って.cppと.defファイルを同じフォルダに入れてビルドしただけでは
関連付けはされないんでしょうか。 VC++側での設定って必要ですか?
://www.geocities.jp/ky_webid/win32c/059.html
引用するけど、
○DLLを使う側
.DEFファイルを使う場合であっても、特に呼び出し側に変化はありません。.DEFファイルは、DLLを作るときに 必要なだけであり、呼び出し側には不要です。
DLL作る時は、関数は_stdcallでextern "C"して__declspec(dllexport) すれば
func@4とかの関数名になる。
_func という名前にするためにdef使う。
あ、前の _ は無いな
http://msdn.microsoft.com/ja-jp/library/z4zxe9k8.aspx Visual C++
DLL からのエクスポート
更新 : 2007 年 11 月
DLL から関数をエクスポートする方法には、次の 2 つがあります。
・モジュール定義 (.def) ファイルを作成し、DLL をビルドするときに .def ファイルを使用します。
名前ではなく序数で DLL から関数をエクスポートする場合は、この方法を使用します。
・関数の定義に __declspec(dllexport) キーワードを使用します。
上のどちらかの方法を使って関数をエクスポートする場合は、必ず __stdcall の呼び出し規約を使います。
642 :
623:2010/03/14(日) 17:32:22
Dependency Walkerで自作のDLLを見てみました。
Add 自作した関数 add は表示され、DllRegisterServer()等のDll系の関数は表示されませんでした。
C:\WINDOWS\system32にあるDLLを適当に見たところDll系の関数が表示されます。
今の表記では駄目なんでしょうか?
Za.cpp
STDAPI DllRegisterServer(void)
Za.def
LIBRARY za
EXPORTS
DllCanUnloadNow PRIVATE
za.h
extern "C"
__declspec(dllexport) int add(int a)
>>642 >DllCanUnloadNow PRIVATE
これしかないの?
プロジェクト作成のウィザードでATLプロジェクト選べば、
それとDllGetClassObject, DllRegisterServer, DllUnregisterServerの4つが並ぶはず。
って、ATLじゃなくて素でCOMするの?すごいなぁ。
>>643 誤表記+省略してました。defのExport4つです。
DllCanUnloadNow PRIVATE
DllGetClassObject PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
関数の中身の記述もプログラムの構成も合ってるか不明で、良い方法が思いつかないだけです。
ATLも初耳ですので調べてみます。
リンカにDEFファイルが渡されてねえって
C++/CLIを使用しています。
UCHARの配列に入った文字列をTextbox->Textに表示したいのですが、
一文字ずつ取り出すしか無いのでしょうか?
単にTextboxに文字列を表示するだけじゃなくて何か特殊な処理が必要で質問してる?
単にテキストボックスに表示するだけです。
UCHAR moji[8];
Textbox->Text = "Moji:" + moji;
では、エラーになってしまいますので・・・。
std::string("Moji:") + moji
UCHAR moji[8];
TextBox->Text = std::string("Moji:") + moji;
'std::operator +' の宣言を確認してください。
error C2784: 'std::_String_const_iterator<_Elem,_Traits,_Alloc> std::operator +(_String_const_iterator<_Elem,_Traits,_Alloc>::difference_type,std::_String_const_iterator<_Elem,_Traits,_Alloc>)' :
テンプレート 引数を 'std::_String_const_iterator<_Elem,_Traits,_Alloc>' に対して 'UCHAR [8]' から減少できませんでした
'std::operator +' の宣言を確認してください。
error C2784: 'std::reverse_iterator<_RanIt> std::operator +(_Diff,const std::reverse_iterator<_RanIt> &)' :
テンプレート 引数を 'const std::reverse_iterator<_RanIt> &' に対して 'UCHAR [8]' から減少できませんでした
'std::operator +' の宣言を確認してください。
error C2784: 'std::_Revranit<_RanIt,_Base> std::operator +(_Diff,const std::_Revranit<_RanIt,_Base> &)' : テンプレート 引数を 'const std::_Revranit<_RanIt,_Base> &' に対して 'UCHAR [8]' から減少できませんでした
'std::operator +' の宣言を確認してください。
error C2676: 二項演算子 '+' : 'std::basic_string<_Elem,_Traits,_Ax>' は、この演算子または定義済の演算子に適切な型への変換の定義を行いません。(新しい動作; ヘルプを参照)
ダメでした・・・。
UCHAR moji[8];
Textbox->Text = moji;
しきりなおり、これでエラー貼ってみろ。
error C2664: 'void System::Windows::Forms::Control::Text::set(System::String ^)' : 1 番目の引数を 'UCHAR [8]' から 'System::String ^' に変換できません。(新しい機能 ; ヘルプを参照)
理由: 'UCHAR *' から 'System::String ^' へは変換できません。
使用可能なユーザー定義された変換演算子がない、または
アンマネージ型をマネージ型に変換できません。
こうなりました。
653 :
651:2010/03/14(日) 23:42:54
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
unsigned char u_a[] = "わーるど";
// TCHAR w_a[] = L"わーるど";
wchar_t w_a[] = L"わーるど";
String^ s_a = gcnew String(w_a);
label1->Text = u_a;
label1->Text = gcnew String(w_a);
}
答えになってるかどうか分からないけど、参考まで。
Textbox->Text = gcnew System::String(moji);
とか?
>>653 private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
unsigned char u_a[] = "わーるど";
label1->Text = u_a;
}
error C2664: 'void System::Windows::Forms::Control::Text::set(System::String ^)' : 1 番目の引数を 'unsigned char [9]' から 'System::String ^' に変換できません。(新しい機能 ; ヘルプを参照)
1> 理由: 'unsigned char *' から 'System::String ^' へは変換できません。
1> 使用可能なユーザー定義された変換演算子がない、または
1> アンマネージ型をマネージ型に変換できません。
こうなってしまいます。
UCHARに入れた文字列を表示したりマネージ型に変換することは出来ないってことでしょうか?
>>654 error C2664: 'System::String::String(const wchar_t *)' : 1 番目の引数を 'UCHAR [8]' から 'const wchar_t *' に変換できません。(新しい機能 ; ヘルプを参照)
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
それもダメでした・・・。
657 :
651:2010/03/15(月) 00:07:07
TCHAR にすればできると思う。
ドライバが指定してる型がUCHARの場合、C++/CLIじゃどうしようも無いのかな?
やっと出来ました。
wchar_tを挟まないといけないのですね。
めんどくさっ。
UCHAR moji[8] = "mmmmm";
wchar_t w_m[8];
for(int i=0;i<8;i++){w_m[i]=(wchar_t)moji[i];}
Textbox->Text = gcnew System::String(w_m);
>>659 unsigned char moji[8] = "mmmmm";
Textbox->Text = gcnew System::String((char*)moji);
>>660 その書き方があったっ。
文字列型が多くて混乱してました。
ありがとうございます。
662 :
651:2010/03/15(月) 02:40:41
Stringの8bit用コンストラクタString(SByte*)だけだよ。
String(signed char*)はあるのにString(char*)が無いよ。
文字列でつまずくレベルで
あえてC++/CLIやる意味ないだろ
あっちいけ
>>645 ありがとうございます、プロジェクトプロパディ→リンカのモジュール定義ファイルで解決しました。
基本的なこともできてなかった…
visual C++ 2008のマウスのメッセージについて質問です。
非クライアント領域でのクリックの座標から色を知りたいのですが、
非クライアント領域のクリックのメッセージを知る方法が分からずに躓いています。
クリックは非クライアント領域で2回連続で押し、それぞれの座標を知りたいです。
WM_NCLButtonDownだとタイトルバーの座標までは分かっても、ウィンドウの外だと
反応してくれませんでした。また、一度ウィンドウが非アクティブになると拾ってくれないようで
他の方法を考えています。
現在は非クライアント領域をクリックしたときに送られる何らかのメッセージを受けたとき、
sendmessageでWM_LBUTTONDOWNを送る方法を考えています。
単純に非クライアント領域を何度かクリックした座標を受け取る方法は
やはりないのでしょうか?
コンパイルは通るのに何度やってもクリティカルエラーが出て実行が出来ないと思ったら
オーディオインタフェースの電源入れておかないとダメなのね
>>668 ありがとうございます。お手数おかけして申し訳ありませんが、
できたら使う関数名やメッセージ名など教えていただけると幸いです。
お願いします。
非クライアント領域ってどこのこと言ってるの?
どうも質問の内容がおかしい気がする
ウィンドウの外でその用途ならキャプチャするとか
>>669 マウスキャプチャかフックかな
キャプチャならSetCapture〜ReleaseCapture
フックならSetWindowsHookExでWH_MOUSE
DLLにしたくないならWH_MOUSE_LLで
次の質問は、ActiveXで描画した画像のキャプチャの仕方かなw
>>670 すみません、ウィンドウの外のつもりでした。
これは最初に書くべきだったかもしれませんが、キャプチャは
一度他のウィンドウをクリックしたりしてアクティブなウィンドウが移ると
キャプチャが働かなくなると読んだので、それ以外の方法で探していました。
>>671 フックというのを少し調べてみました。まだ把握はできていませんが、
これならなんとかなるかもしれないです。しばらくこれで調べてみます。
ありがとうございました。
条件小出し野郎にレスしないで正解だった
675 :
デフォルトの名無しさん:2010/03/16(火) 11:24:24
WINXP EXCEL2003
指定したセルにだけ入力したいのですがどこを直せばいいか分かりません。
Sub Input_Date(ByVal iDay As String)
ActiveCell.Value = CStr(iYear) _
& "/" & CStr(SpinButton1.Value) & "/" + iDay
ActiveCell.NumberFormatLocal = ComboBox1.Value
End Sub
どうすれば良いのでしょうか?
>>674 すみません、一応そういうつもりではなかったんです。
気を悪くされたら申し訳ありません。
一応僕としては
>>666のほうで4行目や終わりの段落で
連続で何度かクリックして座標を受け取る方法、ということで質問したつもりでいたので
話の流れが悪くなってしまいどのようにレスを書くか迷って
あのような書き方になってしまいました。
どうせ長文になるのなら、質問項目とすでに試したことを箇条書きなどとして
分かりやすく記述するべきであったかと思います。
決して内容を小出しにして居座るつもりではありませんでした。
お気を悪くしてしまい申し訳ありませんでした。
>675
EXCELだったらVBAでも勉強すればいいんじゃないか
678 :
GV:2010/03/16(火) 11:39:54
中学卒業してもうすぐ高校のGVです。
VisualBasicをやってます。
でも、そろそろ他も勉強したいです。
C++かC#かJavaにしようとおもいますが、どれがいいですか?
皆様なりの見解を教えていただけますか?
それか、ほかにお勧めの言語があったらおしえてください。
全部環境先に作ってみ
680 :
GV:2010/03/16(火) 11:48:55
りょうかいでs
VC++、VC#いれました。あとはJDKでs
HelloWorldくらいはそれぞれで書いてみて、
いくつかやってると基本的なとこはあまり変わらないことに気がつくと思うんで
とりあえずやりやすいやつから始めるといいと思うよ。
IDEの使いやすさとかVBやってたとこからいくとC#やってみるのがいいかもね
VBやったならrubyがいいにきまってる
どう考えてもCでwinapi触って遊ぶ段階だろ。
いや、永遠に初心者で居てくれないとこの案件激減の世の中
ライバルが増えるのは良くない
>>678 自分が頭良いと思うならC++で、
そうでないと思うなら
C#かJavaが良いと思うよ。
理系ならc,asm,c++で
文型ならc#,javaで
asmを勧められた人は不幸になるという噂を聞いたよ
そもそも、なんの言語がいいかという質問なら、
こんなVC++オンリーのスレで聞かないほうがいいと思うのだけど。
unko(){
unko = 0;
}
と書くのと
unko() : unko(0) { }
と書くのにはどういう違いがあるの?
もしや
unko::unko() : unko(0) {}
のことを言っておるのか
そういうのはC++言語のスレでやって
すいません以下に訂正で(・∀・)
unko(){
chinko = 0;
}
と書くのと
unko() : chinko( 0 ) { }
と書くのにはどういう違いがあるの?
そういうのはC++言語のスレでやって
それとプロジェクトの中のファイルをまとめて印刷ってできるかな?
できれば1ファイル1枚でなくて、連続して出力したい(紙の無駄無くしたい(エコ)的な意味で)でヤンス
そういうのはソフトウエア板で聞いて
そして実際他の板に書いたら今度はマルチポスト氏ねって粘着するんですね、わかります
自分で印刷プログラムを作るのならここでOK
698 :
GV:2010/03/17(水) 11:29:41
>>685 他の人が言うには頭いいらしいけど、
自分では思ってない。これはどうすればいいですか?
>>698 人に聞く時点でC++は後回しがいいと思う
700 :
GV:2010/03/17(水) 13:10:54
701 :
685:2010/03/17(水) 13:49:39
>>698 じゃあ例えば
俺みたいにゲームはやり込むのが好き とか
微妙な小難しいルールが出て来るとwktkしてくるような
性格しているとかならC++で、
そうでないと思うなら
C#かJavaかなぁ。
一般説としてコンテンツ消費者とコンテンツ作成者は別次元の生き物。
先ずは文法作法が最小限で何でも作れるcで簡単なゲーム作れば。
画像の描画、音の再生、ウィンドウの作成などが簡単なライブラリのSDL使ってさ。
ゲーム部分に注力しやすいし。
※勿論vc++エディタでな!
703 :
GV:2010/03/17(水) 17:29:42
VisualStadio2010で
RAD開発可能でnativeコードを吐く(.NET Frameworkを要求しない)のってありますか。
言語は問いません。
ない
706 :
デフォルトの名無しさん:2010/03/17(水) 23:06:53
>>704 っえ?
VC++MFCはないのかしらん?
MFCはRADじゃないということはないか
708 :
デフォルトの名無しさん:2010/03/18(木) 00:44:11
SetMapMode、SetViewportOrg、SetViewportExt、SetWindowExt
でDCの座標を変換してたいのですが、これらのAPIをどこで呼び出すのが正しいのですか?
OnInitialUpdateで行っても無効のようです。
OnDrawで行うと期待している動作をするのですが、再描画の際に毎回これらのAPIを呼ぶのは
パフォーマンス的にどうかな?と思い質問してみました。
BMPを読んで、ウインドウに表示する書き方がわかりません。マイクロソフトビジュアルスタジオをつかってます。
あと、5秒ごとに自動的に画像を表示するプログラムって技術的に可能ですか? ボタンをおさなくても自動で動くようにしたいです。
MFCはRADとは言えんな
どうしてもC++でRADと言うならC++Builderだし
711 :
デフォルトの名無しさん:2010/03/18(木) 02:03:45
つか、RADである必要があるか?
>>709 VSの何を使ってるかくらい書いたほうがいいぞ
ここに来るくらいだからC++だろうけど、CLIかもしれんし
定期的に画像を表示するのは可能
BMPを読むのはほんとに低レベルのものから用意してある機能を呼ぶだけのものまで
いろいろあるので、目的も書いた方がいいかも。
スレ違いかもしれませんが、よかったら教えてください
ソフトを使うのにVisual C++ 2008 SP1 Redistributable Package (x86)をインストールしろと書いてあるので
検索したらVisual C++ 2008 SP1 Redistributable Package (x86)というのもありました
この場合はSP1だけを入れればいいんでしょうか?それとも両方入れるんでしょうか?
ソフトが何なのかわからんし、俺にはその二つが全く同じに見えるんだが
おれにも同じに見えるが
2005と、2008か
x64とx86の間違いだろう、たぶんw
いや、文脈からすると無印かSP1かの違いだろうw
末尾に ^ のついたクラス名ってどんな役割するものでしたっけ
でしたっけ
720 :
714:2010/03/19(金) 20:15:18
すいません、間違えました 少し質問を変えます
Win32 OpenSSLを使うのに、Visual C++ 2008 Redistributable Package (x86) を
入れろと書いてあるのですが、より新しいSP1も入れなくてもいいんでしょうか?
新しい方 だけ 入れろ
723 :
714:2010/03/20(土) 02:01:04
SP1だけ入れればいいんですね
ありがとう
VC2003で作成したダイアログリソースをフリーのリソースエディタのResEditに読み込んだところ
フォントサイズを変更してないのにダイアログやボタンの大きさが変わって表示されてしまうんですが
これはVC側の設定に問題があるのでしょうか?
フォントは "MS Shell Dlg"でサイズを8に設定しています。
>>724 VC側のフォントの設定が違うんじゃないの?
726 :
724:2010/03/20(土) 08:52:52
>>725 プロジェクト作成しなおし、フォントを設定しなおしたところ両方で同じ表示にすることが出来ました。
やはりVC側の設定がうまく反映されていなかったみたいです。
有難うございました。
727 :
デフォルトの名無しさん:2010/03/20(土) 22:04:36
ボタンとかをビジュアルスタイルにするには?
ビルド時にマニフェストを埋め込んでいますとか出るが普通のデザインのままなんだが
>>727 マニフェストがあればなんでもいいというわけではない。
ビジュアルスタイルを有効にするには、comctl32.dllのバージョン6を参照させる指定を行うことが必要。
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
>>718 ×クラス名 ○型名な。
マネージヒープに存在するオブジェクトを指すハンドルを意味する。
730 :
デフォルトの名無しさん:2010/03/21(日) 02:53:43
インラインアセンブラについて質問です。
typedef struct EXT_VECTOR
{
float e[3];
EXT_VECTOR(float x1, float x2, float x3)
{
__asm
{
mov ebx, e
fld x1
fstp [ebx]
fld x2
fstp [ebx + TYPE float]
fld x3
fstp [ebx + TYPE float * 2]
}
}
};
このような構造体のコンストラクタでebxにeのアドレスをロードしようとすると、
どういうわけかebxの値が0のまま変動しません。
thisポインタをロードすれば動くのですが、中身を変更したことを考えると得策ではないと思います。
何か回避する方法はあるのでしょうか?
ここ初心者スレですよ
>>730 this経由じゃないとムリにきまってるだろ。
visual c++のコンパイラの設定についてなんですが
最適化(/O2)を設定したときに、決めた行だけはそのままコンパイル(/O2の影響を受けない)とかできますか?
737 :
デフォルトの名無しさん:2010/03/21(日) 12:38:36
VC++って、VC#のDataGridViewみたいなグリッドが用意されていないのは
なぜですかね?
簡単に作れるから?
OS標準のコントロールにないから
739 :
デフォルトの名無しさん:2010/03/21(日) 13:19:36
>>738 OS標準のコントロールにないのに、VC#にある理由は?
.netにそういうのがあるんなら当然VCでも使えるだろ
うん、.NET なら VC++ でも DataGridView つかえるよ。
.NETはVBユーザーが多いからだろうな
VB.NET以前からあったしな
C++の入門書にはnewしたら必ずdeleteしろとありますけど
int main()
{
int* p = int new;
return 0;
}
とすると、プログラムが終了した後もnewで確保された4バイト分のメモリ領域は
OSからみると、使っちゃいけない領域と思っているのですか?
プログラムが終了したら、そのプログラム内で確保された領域は
OSが自由に使えるとしたら、ギガバイト単位でメモリを搭載している最近のPCなら
特にこだわる必要がないように思えます。(まぁ、4バイトなら・・・)
↑
int *p = new int;
の間違いです
初心者スレだから勘弁してください
>>745 プロセス終了時には、そのプロセスが使用したメモリはOSが解放します。
大きなプログラムを書くようになると、いつのまにかメモリ足りなくなったりして
どこでdeleteし忘れてるのか探すのにすごい労力かけたりするからね。
サービスとかデーモンみたいに終了しないプログラムもあるしな
748 :
デフォルトの名無しさん:2010/03/21(日) 15:59:28
>>731 すみません。
他にどこで聞けばいいのかわからなかったです。
>>732 配列eにもアドレスがあるのにthisじゃないと通らないということは、
配列eにはアドレスがなくて、コンパイル時にアドレスを計算してるってことですか?
わかりません><
>>734 CとC++の仕様の問題ということですか?
>>747 レスありがとうございます。
ってことは、deleteしなくても、そうそう問題はなさそうですよね
逆にdeleteしてはいけないところで、deleteしてしまっていて
そのポインタに値を書き込むほうが危険ですよね
>>749 そんな心配をしなくちゃならないようなプログラムがdelete以外は完ぺき
とは思えないな。素直にちゃんとやるべきだし、スマートポインタというのもある。
4バイトぐらいなら何か特別な理由でもないとnew使わないし
>>749 不安になるくらいなら、newは使うな。せめて、スマートポイントにしておけ。
できる限りSTLコンテナかローカルインスタンスで済ませ。
>deleteしなくても、そうそう問題はなさそうですよね
こんなコはプログラミングしちゃダメ。
>>749 > 逆にdeleteしてはいけないところで、deleteしてしまっていて
> そのポインタに値を書き込むほうが危険ですよね
ちょっと待てwwwww
そんな発想は勘弁
動的なメモリ管理なのに
4バイト固定なんて状況しか頭に浮かばないんじゃ使い道ないだろ
なんだかプログラムがバグる。
↓
どうやら二重deleteしてるっぽい
↓
でも、どうしてもデバッグできねえ
↓
逆に考えるんだ! delete しなければいい。
みたいな過程をたどって
>>745みたいな考えになったとか。
それ、逆の発想やない、過ちや
CDCのLineToでLineTo(100,100)で線を描くと左隅から右下がりの直線になります。
画面の中心から右上がりに描くためにはどうすればいいのですか?
>>758 MoveToで中心を指定してから、LineToで良いんでないかい。
>>758 SetMapMode()とか、SetWindowOrg()あたりをいじればいいんじゃね?
初心者スレって回答する側が初心者ってことかw
アナログ時計のサンプルみりゃいいい
「このスレバカばっかり」系のカキコしたやつが、
ビシっと回答して、初心者どもを黙らせた例って見たこと
ないんで、ほとんど脳内上級者なんだろう。
あたりをいじればいいんじゃね?
www
>>767 方向性があってれば、こと細かく教える必要はないな。
ヒントだけで調べ切れなかったら、質問者がさらに質問すればいい。
つーか人に聞くことかこれ?
>>760 べつにこれでいいのか。
なんかぜんぜん違ってるのかと思ったよ。
WMPコントロールがダブルクリックされた時に、全画面再生されないように、
ダブルクリックをキャンセルするにはどうしたら良いのでしょうか?
System::Void axWindowsMediaPlayer1_DoubleClickEvent(System::Object^ sender, AxWMPLib::_WMPOCXEvents_DoubleClickEvent^ e) {
//全画面再生をキャンセル
}
VC++2008EEでWMPはVer.10等です。
こんどはヒントも出せませんかw
773 :
デフォルトの名無しさん:2010/03/23(火) 17:03:21
キャストがうまくできず実行するとエラーが起きるんだけどどうしたら?
LPWSTR s;
wsprintf(s, L"n = %d", n);
SetWindowText(hwnd, (LPCTSTR)s);
bccだとchar *だけで済んだのに型にうるせーな
LPWSTRをLPCTSTRに「キャスト」するなよ。。。
LPCTSTRが「const char*」だった場合どーするんだ。
キャスト以前の問題だがな
今はUNICODEビルドみたいだが、マルチバイトにするとbccと同じになるぞ
まずはキャストで解決しようとするな、コンパイル通ればいいってもんじゃない。
とりあえずは、 TCHAR s[20]; にかえてみて
779 :
デフォルトの名無しさん:2010/03/24(水) 01:06:52
TCHAR s[20];
wsprintf(s, TEXT("n = %d"), n); // または<stdio.h>と<tchar.h>をインクルードした上で_stprintf
SetWindowText(hwnd, s);
WCHAR s[20];
wsprintfW(s, L"n = %d", n);
SetWindowTextW(hwnd, s);
で、いいだろ。
ジェネリックテキストとか、めんどうなだけでいいことなんにもないよ。
何でそうなるのかがわかってるならそれでいいけど、
言われたとおりにしかできないならまたはまるぜ
Visual Studio 2008です
ネコでもわかる〜Windows SDK編 を見つつプログラミングしています
日本語文字列を縦書きで描画する方法をご教示お願いします
DrawTextExのオプションにそれらしきものは見つかりませんでした
一文字ごと座標をY軸方向にずらしながら逐一描画するしかないのでしょうか
縦書きフォントで縦方向に書くだけ
CreateFontのほうにベースラインの角度の指定があるでしょ、
それで
>>783
TEXT()とL""
って同じもの?
それを区別出来ないのはやばい
>>785 TEXT()はVisualがC++の時はKがついてそれ以外は付かない。
LはVisualだから
ttp://rina.jpn.ph/~rance/directx7/directx7study/ddraw/p021.htm このサイトのスケルトンプログラムでエラーを3つ吐きます
参考書を開いても一つとして解決出来ません・・・
Visual C++ 2008 Express Edition を使用しています
1>c:\documents and settings\ms\デスクトップ\test\test\test\winmain.cpp(50) : error C2143: 構文エラー : ';' が 'case' の前にありません。
1>c:\documents and settings\ms\デスクトップ\test\test\test\winmain.cpp(72) : error C2440: '=' : 'char [9]' から 'LPCWSTR' に変換できません。
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>c:\documents and settings\ms\デスクトップ\test\test\test\winmain.cpp(102) : error C2664: 'CreateWindowExW' : 1 番目の引数を 'const char [14]' から 'DWORD' に変換できません。(新しい機能 ; ヘルプを参照)
1> この変換が可能なコンテキストはありません。
ゲーム製作板でも相談しているのですが。
VIsual C++初心者なもので……
FreeTrain EX Av Projectのriorioです。
このたび正式版1.0をリリースし、それとともに次期版のベータ2.0.1.0も配布開始しました。
http://sourceforge.jp/projects/freetrain-exav/ 1.0は問題ではなく、2.0.1.0のほうでご協力をお願いします。
ver2から、新たにC++/CLIで記述されたDirectXラッパーを作成して使用するようにしたの
ですが、どうもビルドに問題があるのかソースに問題があるのか、原因いまだ不明なのです
が、本来
・DirectX9.0c
・.NET 2.0
の2つさえ入っていれば動作するはずのFreeTrainEX Av本体が、単独動作せず起動すぐ
クラッシュということになっています。
いろいろ試してみて、Visual C++ 2008がExpress Editionでいいのでインストールされて
いたら動作する、というところまでは突き止めました。
私自身もExpress Editonで開発しているのでC++部分とC#部分の一発ソリューションという
のはできず、まずC++のDirectXWrapper.dllのみをC++でビルドし、そのあとでC#でDLLを
参照してビルドして完成という手順を踏んでいます。
この手順の中になにか不備があるのではと考えられるのですが、わかりません。
SourceForge.jpのほうには2.0.1.0のソースをSVNでコミットしてあります。
ソースから読んでわかる方、ぜひ解明・解決していただけないでしょうか。
>>788 自己解決しました
SJISとUNICODEの問題でした
これは古いサイトを参考にするのは大変そうだ・・・
>> 783 >> 784
ありがとうございます
縦書き文字を出力することができました
幾つかの試行錯誤とMSDNライブラリから
DrawTextは縦書き文字に未対応(改行後の文字送り方向が下方向固定)らしいですね
別の方法を探すことにします
ありがとうございました
793 :
789:2010/03/25(木) 09:26:23
>>792 このC++部分はほかの人に作ってもらって、うpろだ経由で受け渡ししたものなのですが。
その最初の作者のかたは最近来てくれなくて連絡とれないんです。
自分がC++初心者でビルドのオプションとかもよく分かってなくて。
可能ならSourceForgeで公開してるソースを手元のC++でビルドしてもらって
アドバイスいただけたらありがたいです。
>>793 DirectXWrapper.dllがDebugビルドされてるので
Releaseでビルドし直すといいよ。
>>794 うほ
そんなことで解決するとは。
ありがとうございますありがとうございます。
796 :
デフォルトの名無しさん:2010/03/26(金) 21:34:17
OPENFILENAME構造体やGetOpenFileName()が未定義とでるんだがどうしたらいいの?
ヘッダファイルをインクルードすればいいだけじゃん
798 :
デフォルトの名無しさん:2010/03/26(金) 22:24:56
当然してるが
Comdlg32.lib
メモリデバイスコンテキストの座標系をY軸を上に取りたいのですが
~~~~~
どうしたらいいですか?
日本語でおk
また同じ質問を別人のふりでしてるのかと思った
aruaru
2008 express editon使用
taskschd.hをインクルードすると、
windef.h(154) : warning C4114: 同じ型の修飾子が 2 度以上使われています。
windef.h(154) : error C2632: 'char' と 'char' の 2 つの型指定子のあいだにコードがありません。
windef.h(154) : warning C4091: 'typedef ' : 変数が何も宣言されていないときは、'unsigned char' の左辺を無視します。
となります。
また、put_WakeToRunを使いたいのですが、具体的にはどう指定するのでしょうか?
put_WakeToRun( (タスク名) VARIANT_BOOL true); であってます?
COMはデータ型ややこしいから初心者向きではないな
806 :
デフォルトの名無しさん:2010/03/28(日) 19:24:34
Visual C++ 2008 ProfessionalでCLRのWindowsフォームアプリケーションでソフトを作っています
labelがたくさんあってfor文でlabel1→label2→label3→…と処理したいのですがどうすればいいですか?
for(i=0;i<…){
labeli->…;
}
では勿論だめですのでいい方法を教えてください
>>806 Label[] labels = new Label[] {label1, label2, label2, …};
foreach (Label label in labels) {
label->…;
}
((*(CABC*)(&(*(CABCD*)(&*this))))).m_hoge
って何?
キャスト
健康のため使いすぎに注意しましょう。
キモすぎだろ
>>807 ここはc++の板だったな。
おもいっきりc#のコード書いてた。
スマソ。
>>804 先にwindows.hをインクルードしていないと駄目とかでは?
>>808 強烈ですね
面白そうなんで考えてみた。30分もかかったが
いわゆるC++屋って人なら1、2分程度でわかるのですか?
なんか最近プログラム実行後にもコンソールが残ったままになるんだけどこれ何なん?
実行するたびに残っちゃうからやるたびにタスクバーにたまってく
しかもこの状態だと正常にシャットダウンされないから強制終了させるしかないし
誰か同じようになってない?
そういうときはWindowsを再インストールするのが常識
ウイルスだな
周りだと4人ほど同じ症状が出てるんだよなー
ウィンドウズアップデートとかの影響かとおもったけど他にいないなら
ウイルスもありえちゃうかな
>>819 むしろウイルスなどのマルウェア説が自然だろそれは
LANで感染しちゃったんだな
【依頼に関してのコメントなど】よろしくおねがいします! 本文が長いといわれたので2分割します
【板名】 プログラム技術
【スレ名】 ★初心者にVisual C++を教えるスレ★ Part35
【スレのURL】
http://pc12.2ch.net/test/read.cgi/tech/1256645713/ 【名前欄】
【メール欄】
【本文】↓
ゲーム制作の途中です。ファイルの分割で困っています
ファイルが多くなり、includeが多くなってきたのでmain.hというヘッダファイルにまとめました
他にはcppファイルがいくつかあり、kozo.h(クラスファイルや構造体をまとめるヘッダファイル)があります
そしてそのmain.hを全ファイルでincludeすれば管理が楽かと思ったのですが
"public: __thiscall chara::chara(void)" (??0chara@@QAE@XZ) は既に main.obj で定義されています。
とエラーが出てしまいます
charaのコンストラクタが二重定義されてしまってエラーが出ていると思うのですが、なにか解決方法はありますか?
includeを細かく設定していくしかないのでしょうか
あともしよろしければファイル分割の王道みたいなページがあれば教えてください。よろしくお願いします。
main.hの内容
#include "kozo.h"
#include <string>
#include <windows.h>
extern int shujinkoX ;
kozo.hの内容
class chara{
private:
int str;
public:
chara();
};
chara::chara(){
str=0;
}
824 :
822:2010/03/30(火) 23:25:40
インクルードガードでぐぐる
>>825 おおおありがとうございますーーー!!!
コンストラクタの定義をどこかcppファイルに移すというのはだめ?
>>827 できれば避けたいです・・
今なら修正もできるといえばできるんですが、
これから先も増えていくと思うので、ヘッダファイルなどで一元処理したかったのです
コンパイルにかかる時間は諦めます
全部中に入れろ
すごく・・・見にくいです・・・
ならコンストラクタの定義にinline付けておけばいい。
832 :
816:2010/03/31(水) 16:33:25
・WM_DESTROYでPostQuitMessage()を呼び出していないだけ
・書いたコードが間違っていてプロセスが残ってるだけ
・VSの再インスコ
・SP当ててみる
・OS再インスコ
Microsoftに直接聞けばいい。
VC++2008EEって名前付き返り値の最適化ってしてくれますか?
836 :
デフォルトの名無しさん:2010/04/01(木) 15:15:23
入力時最初の文字が小文字になってしまいます。
通常の入力にするには設定のどこを見れば良いでしょうか。
VisualC++2005
簡単なソースをvc++6.0とvc++9.0(2008)でReleaseビルドしたのですが、ファイルサイズが6KBほど異なりました。
静的リンクしてるCRTのバージョンの違いにより内部的に生成されたコードサイズが異なってしまったという認識でおkでしょうか?
コンパイラの最適化の違いもあるかと思いますが、基本的にCRTを動的リンクに変更すれば
exeサイズに大きな違いは出ないと考えてもよろしいでしょうか?
こまけぇこたぁいいんだよ
840 :
デフォルトの名無しさん:2010/04/01(木) 17:43:58
広い意味での変数名
841 :
デフォルトの名無しさん:2010/04/01(木) 17:46:29
追加
メンバ関数内でCEditと入力すると最初のアルファベットがcとなってしまう。
842 :
デフォルトの名無しさん:2010/04/01(木) 18:02:15
みすません。
PC側の問題でした。
解決しました
Microsoft Visual C++2008の実行ボタンってどこにあるんでしょうか 2005では ! の形してたそうですが・・・
ビルド>>実行でいいですよね?
ファイル 編集 表示 プロジェクト ビルド デバック ツール ウィンドウ ヘルプって並んでて、
その下にファイルを開くとか保存のアイコンがありますが、実行がどれかわかりません
ツールバーの編集できないのか?
>>845 たいていのIDEはメディアプレーヤーの再生ボタンと同じ三角じゃないかな
>>845 実行はビルドのメニューやコマンドの分類の中にはない。デバッグの中にある。
デフォではツールバーは「標準」しか出てないんじゃないかな。
出し入れはメニュー・ツールバー上の右クリックでポップアップするメニューで。
「デバッグなしで開始」のアイコンは右向き三角形の左に三本横線がついたものになった。
デフォではデバッグのツールバーにのらなくなった。
追加は、上記右クリックメニュー→ユーザー設定(C)...→コマンド(C)から探し当てて
ツールバーにDrag&Dropで。
>>814 そうしてみましたが、ダメでした。(状況不変)
DLLフック作成してるんですが
フックを呼び出したときDLLのエントリポイントに行ってくれず、インスタンスハンドルを取得できません。
呼び出し元のEXEからフックのハンドル取得して引数で渡したりすれば意図したことはできますが
どうみても何かおかしいと思うんですが、どうすればいいですか
>>850 DllMainが呼ばれるのはLoadLibraryでdllを呼び出したときだろ?
dllのインスタンスハンドルが欲しいならDllMainの第一引数をグローバル変数で取っておけばいい
具体的にどういうAPI、手順で「DLLフック」とやらをやっているのかの
情報を書き込まないと、的を射た答えは返ってこないと思われ。
853 :
デフォルトの名無しさん:2010/04/02(金) 12:46:11
VC++6.0版のfmcieサンプルを探しているのですが
見つかりません。
どこに行けばダウンロードできますか?
msdnで2005版は見つかったのですが
854 :
デフォルトの名無しさん:2010/04/02(金) 15:46:53
VisualC++ ExpressEditionの質問です。
たとえば浮動小数点の四則演算を数百万回繰り返すだけのアプリの場合、マネージドでもネイティブでも
実行速度はそれほど変わらない?
VC2008では異ディレクトリでも同一ファイル名が使えなくなったと聞きましたが
それって改悪じゃないの?
ヴィジュアルCつかえば、ウィンドウの大きさとかボタンとかをいちいちプログラムでつくらなくていいのか?
友達がデーターベースとリンクさせるプログラムでも作って面接する会社に見せろっていってたんだが
それってアクセスとかオラクルっていうのつかうの?
過疎ってるようなので他で聞きます
大規模アク禁らしいからなぁ
どこいってもだめだろうなぁ
そうか・・・orz
>>856 ボタンを貼り付けて、後はそのボタンを押した時の処理を
書けば、簡単なことならできる。
Visual C++ 2008 Express Edition インストール時に
SQL Server 2008 Express Edition をインストールするか
どうか選択できるから、データベースはとりあえず
SQL Server を使えばいいと思う。
でも、そんなことを聞いてるレベルで、自分が得意でないことを
「できます」と言って入社するのも、どうかと思う。そんなに
その会社で働きたいの?
嘘ついて入社する気はさらさらないが、CとJavaの基礎がわかるレベルで
実務経験0だと30社は雇ってくれないみたいだから、新しい技術か資格を
取るべきかな・・・と思いまして。
>>862 その求人ってハローワークの求人かな? ハローワークの
求人って、(地域差はあるかもだけど)「経験あり」の求人って
多いですよねぇ。
仕事に必要なのは知識ではなくて、自分で考えて何かを
作り上げる力だと思う。
知らないことは必要になったらそのときに調べながら作る。
とりあえず、その友人の言うように、実際に何かを作ってみる
のがいいと思う。
>>861 のは無料で利用できるから、いろいろ
やってみたらいいと思う。
多いと言うかそれしか無いな@地方Y県
>>862 とりあえず自分で作ってみろ
ウダウダ言ってる暇あったら少しでも経験を積め
仮に入ったとしても自分で覚える癖つけておかないと続かないぞ
char配列でも何でも良いけど、文字列変数に格納された関数名の
関数を実行する方法は無いでしょうか?
char name[] = "func";
void func(){ printf("Hello"); }
//これでhelloが標準出力されるような方法
hoge(name);
よろしくお願いします。
Ruby のソースコード読むとやり方が書いてあるよ ^ ^
868 :
866:2010/04/09(金) 09:24:21
>>867 866に対するレスでしょうか?
Rubyのどのソースを読むと書いてありますか?
870 :
866:2010/04/09(金) 10:21:43
>>869 ざっと目を通してみましたが、対応テーブルを作って
それで相互変換して解決するって事ですか
もうちょっと読み込んでみます
一般的なC言語の質問なら人が多そうなスレで質問した方が早く回答がもらえる気がするけど
わざわざ人が少ないVC初心者スレで質問してるわけだから何か特別な事情でもあるんだろ
872 :
デフォルトの名無しさん:2010/04/12(月) 16:26:41
すみません、お知恵お貸しください。
VC2008(元のプロジェクトは それ以前のVer.で作成)を使ってます。
新たに スタティックな
std::list<int> foo;
を追加したところ WinMainCRTStartup() 内で
ハンドルされてない例外
が発生するようになってしまいました。
list でなく vector なら 発生しないのですが、
どの辺から探っていけばよいのか ご教授願えませんか
よろしくお願いします。
参照してるライブラリが旧開発環境のもの使ってるとか?
いわゆるヘッダやらlibやらのinclude先フォルダがそうなってるって感じ?
874 :
872:2010/04/12(月) 20:32:40
>>873 ご返答ありがとうございます。
開発機には VS2008 しかインストールしてなく、
includeパス、追加lib も 一通り調べてみたつもりなのですが…
プロジェクトの フレームワークが、 2.0 と 3.5 混在してるんですが
これって 大丈夫なんでしょうか??? (変更させかた判らないんだけど orz)
vc++(2008) Express Editionでdatファイルを作りたいのですが、どうすればよいでしょう?
#include <stdio.h>
int main(){
return fopen('hoge.dat', 'wb');
}
ネタだろうからどうでもいいだろ
気になるんなら自分で試すか、続きはCスレででもやってくれ
突っ込みどころ満載だからな
一目でネタだと判るかどうかが
初心者かどうかの分かれ目
と無理やりスレタイに沿ってみる
c言語かじった程度の俺にはまともにしか見えない
fopenの戻り値はintじゃないよ。
fopenでぐぐればええがな
なんでこんなにいっぱい釣られてるんだ?
世代交代始まったのか?
>>881 #include <stdio.h> の行を取ってしまって
下だけにしたら動いた
int main(){
return fopen("gomi.dat", "wb");
}
>>884 宣言されていない関数の戻り値の型はintとみなされる。
これは良い教材w
すばらしいw
888
Cの本質を上手く突いているね
MS932の文字列をUTF-16に変換する関数を教えてください
>>890 MultiByteToWideChar()で。
ダイアログボックスにチェックボックス付のCTreeCtrl を配置しています。
クリックした際に、適当な処理test()をしたいんですが、
OnNMClickTree1を抜けきらないと、チェック状態が変化しないようです。
よって、OnNMClickTree1の中で、SetCheckでクリック時の状態の反転を
セットしました。
すると、チェック状態にならないようです。
void CXXXXDlg::OnNMClickTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
test();
*pResult = 0;
}
test内でツリーアイテムの状態をみてるので、test前までにツリーの状態を更新
したいのですが、なにかいいアイデアありませんか?
抜けてからtestでいいんだろ
>>893 抜けてから、testでいいですけど、それだとtestを呼ぶためにもう1アクション
必要になりますよね
>>894の続きです。
例えば、エクスプローラだと、左側のツリー内のフォルダをクリックすると、
右側のリストが更新されますよね
>右側のリストが更新されますよね
TVN_SELCHANGED時にリストを更新してるからね
そうですか・・・
VC++を初めて触った為、本気で初心者な質問で恐縮なんですが・・・。
コントロールを配列で指定してText等のプロパティを改変するにはどの様にしたらいいのでしょうか?
例としてVBで話させて頂きますが、Label1〜Label10をデザイナで配置して、
For i = 1 To 10
ControlName = "Label" & i //Dim ControlName As String
Controls(ControlName).Text = "aaa"
Next i
という感じの処理をVC++でも行いたいのですが・・・。
イメージとしては
System::String^ ControlName;
for(i=1;i<=10;i++){
ControlName = "Label" +i
Controls(ControlName)->Text="aaa";
}
という感じかと思ったんですが、どうも上手く行かず・・・。
どなたかご教示頂けないでしょうか?
環境は、VC++2008ExpressでCLRのWindowsフォームアプリケーションとして作っています。
よろしくお願いします。
Controls[ControlName]
あとC系言語ではカウンタ回すときはfor(i=1;i<=10;i++)ではなくfor(i=0;i<10;i++)が普通
つーか、普通の配列では連想配列にならないよ。
つまり、std::mapを使わないとダメ。
いやForm.Controlsはコントロール名をインデックスにして検索できる
フォームならVB使ってればいい
遅れてすみません、
>>899さんの助言で無事動きました!
しかし、今後を考えるとstd::mapも覚えておいた方がよさそうですね。
皆さんありがとうございました!
ちゃんとC++やるんだったらまずCLRを捨てなさい
>>904 Win32よりCLRの方が共通動作環境ということでいいのかと思ったのですが・・・。
.Net Frameworkって実はそんなに普及してないんですかね?
なんだ、.Netか。失敬。
.NETがどうっていうんじゃなくてC++/CLIはC++じゃなくて全く別の言語
そして.NETプログラミングを行ううえでは最悪の言語
.netでやるならC#でやればいいのに
なぜC++
なるほど。
ちょっと調べてみたら『「.netで使えるC++」ではありません。』との文章がすぐ見つかりましたが、まさにこの勘違いをしていました。
基本的にUNIX環境で開発しているので、この勘違いしたままUNIX環境でC++開発始めたら大変なことになってましたね・・・。
早めに気付かせていただいて助かりました・・・。
えー
>>906>>908 申し訳ない、言い方が悪かったです。
開発は.Netじゃないんですが、『CLRで開発するのは実行環境も.Netインストールしてないと駄目だからやめた方がいい。』っていう話かと思って.Netの名前を挙げました。
というか、なんだか基本的な部分で勘違いしてる気もしてきましたが・・・
そもそもC++/CLIはWindows + .NET環境でないと動かないよ
UNIXならJavaで作ったほうがいいのに
>>913 個人的にはJavaやりたいんですが、Visual C++って部分は仕様として決定事項でして・・・。
「Visual C++で」って部分が変えられなくてVBに(というか.Net Frameworkに)そこそこ通じているなら
C++/CLIはまぁありかなーと思わんこともないが
そこそこレベルすら解ってないならC++を1からやって
Win32API方面に走るほうが結果的に早いかもしれぬ
未経験でC++かよ
死ぬしかないな
まだC++/CLIならなんとかなるかもしれないがUNIXじゃどうしようもない
UNIXのVBであるJavaでやるべき
C++は地獄の言語。
熱狂的な支持もあるが。
C++が地獄ならC++/CLIは一体
C++/CLIはアンマネージ地獄に踏み込まなければゲロまみれのC#として使えます
C++/CLIはもうプログラミング言語じゃねぇんじゃね。
MSも葬りたがってるからな
>>922 ウンコはウンコを生み出したヤツが片付けるべき。
さっさとMSもC++/CLIは無かった事にすべき。
ISOだったかその辺のところに仕様を一蹴されたんでしょ?
C++と.NETの良いとこ取りが出来れば良かったのに・・・
ネイティブ吐けない時点でC++を使うメリットってまったく無いな
VC++2010なのですが、デバッグなしで開始はどこでやればいいのでしょうか?
調べてみたんですが、いまいち場所がわからなくて、
メニューからでもツールバーからでもキーボードからでも実行できるはずだけど、
どこにもみつからなかったら普通のexeと同じように実行するだけ
>>925 > ネイティブ吐けない時点でC++を使うメリットってまったく無いな
??バカ??
>>926 「ツール>設定>上級者設定」を選択すると「デバッグ>デバッグなしで開始」が表示されるようになる。
それかCtrl+F5。
VC++9でMFCダイアログベースでちょっとしたツールを作っています。
大枠できたのですが、起動しただけでメモリを8MBも消費しています。
メモリの消費量を抑えたいんですが、どのようなことから改造していけば
いいでしょうか?
指標をお願いします。
ウィンドウを最小化する
ウィザードで作った最小限のプログラムから
順番に中身付け足していけばどこが原因かぐらいわかるだろ
>>932 やってみないと分からない程度の浅はかな知識しかない人は
レス不要です
ちょっとしたツールですから
>>930 GUI のアプリは、各ウィンドウにビットマップを持っているから、
ダイアログのサイズが、800x600 で、ダイアログのほぼ全面に
ボタンとかラベルとかを貼り付けていると仮定すると、さらに
800x600 くらいの大きさののビットマップを持っている状態
であるといえる。これらのビットマップを保持するためにメモリ
はどれくらい必要かというと、1ピクセルあたり24ビットとして、
大雑把に計算すると、
2 * 800 * 600 * 4 / 1024 / 1024 = 3.66MB
ほど必要になる。
試しに今起動してるプログラムでやってみた
ウインドウサイズを変えてみてもメモリ使用量は変化なし
最小化したらメモリ使用量は激減
最小化から元に戻したら最小化する前の半分ぐらいになった。
>>935 そうすると残りの4MB強程度のメモリはダイアログクラスにメンバ変数として追加した
からですかね?
>>937 そうすると、
>>935さんの理屈と矛盾するように思えますけど?
ダイアログはビットマップを持っていて、最低でもその分は消費する
と解釈できるのですが。
ビットマップ+プログラムのコードと変数をメモリ上に展開したもの+DLL+スタック等
だと思うんだけど、DDL とスタックはプロセスごとにメモリを消費するの?それとも
他のプロセスと同じメモリ領域を共有している?
メモ帳(notepad)で ヘルプ > バージョン情報 でダイアログ出しても
メモリ使用量は300KBぐらいしか増えないね
>>935 > GUI のアプリは、各ウィンドウにビットマップを持っている
そもそもこれ本当なの?
偉そうに回答してる奴も初心者だったかw
次スレからスレタイ変更願う
★初心者がVisual C++を教えるスレ★ Part〜
~~~
高々、8MB程度でウダウダ言うほうがおかしい
今日のパソコンはたいてい1GB以上は積んでんだろ?
944 :
デフォルトの名無しさん:2010/05/02(日) 18:40:29
VS2008で、実行ファイルを、$(SolutionDir)Debug とかではなく別のディレクトリ(仮にD:\TEST)に吐き、
なおかつその状態でVSから実行したいと考えています。
$(SolutionDir)Debug
$(SolutionDir)Release
$(SolutionDir)Project ←以前はここにDLLなんかを置いていた
普通に$(SolutionDir)Debug に実行ファイルを出している場合は、
プロジェクトが依存してるDLLや読み込むINIファイルを $(SolutionDir)Project に置くと
VSから実行したとききちんと読み込めているようです。
VSのプロジェクト設定を弄って 構成>全般>出力ディレクトリ を変更すると
D;\TESTに実行ファイルを出すことはできるのですが、この場合、
実行ファイルが置かれているはずのパスがおかしくなるようで、
LoadLibraryで明示的にDLLを読み込む所でプログラムが落ちます。
プロジェクト設定の 構成プロパティ>デバッグ>作業ディレクトリ あたりが怪しいかな?
と思って試しに書き換えたのですが、やっぱりDLLが見つからないようでLoadLibraryする所で落ちてしまいます。
できない事はないんじゃないかなと思いながらも自力ではさっぱりだったので、
どなたか思い当たることがあればお願いします。
DLLをexeの出力先とおなじ場所においちゃだめなの?
c:\autoexec.bat
に
set lib=d:\test
を書いて再起動
hoge.exe の 0x77d0f48f で初回の例外が発生しました: 0xC0000005: 場所 0x27044854
を読み込み中にアクセス違反が発生しました。
と出力ウィンドウに出力されます。
なにをヒントに探せばいいのでしょうか?
デバッガ使える状況なのか、ユーザーからそういう報告を受けただけなのかでかわってくるが、、
それはおそらく未初期化のポインタ使ってアクセスしてるんじゃないかな
mapファイルでも出して0x77d0f48f がどの関数なのか見てみたら
って出力ウインドウか
そこで止まらない?
再試行ボタン押せば該当個所表示されないか?
レスありがとうございます。
環境を書いていませんでした。 VC++2008MFCです。
>>949 mapファイルというのをはじめて聞きました。
ぐぐってみて、挑戦してみます。
確かにどのメソッド内から発生しているのかさえわかれば、追いやすいんですが・・・
>>950 止まりません。
MFCってことはEEじゃないのか
なら、デバッグ-例外-Win32 Exceptions でC0000005にチェック入れてみるとか。
強引にステップ実行しながら特定する手もある
>>952 レスありがとうございます。
デバッガが停止しました。これで追っかけれそうです。
マップファイルを見ても、0x77d0f48f 0xC0000005 0x27044854
が見つからず、ググってました
そりゃそのものずばりのアドレスがあることはほぼ無いだろw
それが含まれるものを探すんだよ
でもデバッガあるならそれでいいじゃない
>>954 ほぼ無いのでれば、ある事もあるんでしょう
その違いは?
そりゃ変数のアドレスならそのままだろう
プログラムのある地点のアドレスだと関数の戦闘のアドレスしか書いてないんだから
途中のアドレスは書いてないよ
シンボル使ったデバッグのやり方を覚えなって
どうせASLRでアドレスなんて変わりまくるようになる
オーナードローについて教えてください。
ダイアログにCListCtrlに貼り付けて、CListCtrlをオーナードローする場合
・ダイアログがWM_DRAWITEMを捕まえる
・CListCtrlを派生させて、DrawItemをオーバーライドする。
どちらが、正解ですか?
オーナードローとは所有者が描画するってことですよね
そうすると、上が正解だと思うんですが・・・
Visual C++2008で全く同じソースコードだけど
デバッグ時に出力ウィンドウに文字が出力されるプロジェクトとされないプロジェクトがある
違いはどこにあるんですか?
プロジェクトが違う
VisualC++で
#include "../include/GV.h"
これの..っていうのはなんですか?
どういう意味があるのでしょうか?
964 :
962:2010/05/07(金) 16:49:23
こういう解釈でよろしいでしょうか?
sourceフォルダとincludeフォルダは同一フォルダ内(同一階層ですか?)
sourceフォルダ内にはmain.cppというソースファイルがある
main.cppに
#include "../include/GV.h"
と記述がある
includeフォルダ内にGV.hというヘッダファイルがある
main.cppの階層(sourceフォルダ内)からGV.hにアクセスするには
main.cppの階層から見て一つ上の階層である階層(sourceとincludeが存在する階層)
のincludeフォルダ内のGV.hファイルなので
"../include/GV.h"
となる。
>>960 ・ロケールを設定していない
・リリースビルド
>>958 鋭いところに気づいてるな・・・
確かに、その辺をごっちゃにして、HPでえらそうに講釈垂れてる
恥ずかしい奴いるけどなw
オーナードローっていうのは上記が正解だよ
鋭いところに気づいてるにしては、ダイアログという言葉には疑問を感じないのだろうか?
このスレはダイアログばかりでつまらん
971 :
デフォルトの名無しさん:2010/05/08(土) 18:15:16
VC++2010のプロジェクトプロパティ・構成プロパティ・C++コード生成で
Debug、/MTbと/MDbはどう違うのですか?
Release、/MTと/MDはどう違うのですか?
2010にはMSDNついてないんだ
VC++ってVC#に比べるとコントロールの数がめちゃくちゃ少ないんですけど・・・
もう、MSはVC++を見捨ててるの?
MFCだったらそもそも期待するのが間違ってるし
C++/CLIなら実際にはC#と同じだろ
まあC++/CLIは見捨てられましたが
>>971 vcランタイムと静的にリンクするかどうかの違い
>>973 2010ではリソースエディタでリボンなどを置けるらしいよ。
おすすめの入門書はなんでしょうか?
VC++2010で英数字をひらがなに変換したいのですが
半角/全角キーを押しても反応がありません
どうすればいいのでしょうか?
>>978 >1
--
この板はプログラムを作る人のための板です。
プログラム・ソフトの使い方は PC 初心者板やソフトウェア板へ。
ここのみんなCでやってるの?
>>973 だってVC++っ
は全然ビジュアルじゃないから
15年前はこれでもVisualだったんだからねっ
visual basicに真似てネーミングしたんだろ。
visual と付いているから貼り付けできるとは限らない。
2年先行していたbasicに合わせただけ。中身は違っていたが。
Visual Basic 1.0 1991年
オブジェクト指向の基本的な部分を実装。
Visual C++ 1.0 1993年
コーディングC++
てのはどう?
VCとやるから勘違いしてる人が大勢になる
だから
コーディングC++
じじいばっかりか