★初心者にVisual C++ ..
237:デフォルトの名無しさん
07/01/26 21:12:11
>>236
>>235ですが
「Vc6 Release」で検索しても分からなかったんですが
238:デフォルトの名無しさん
07/01/26 21:16:12
ツールバーのあたりで右クリックして「ビルド」をチェックで出るよ
239:デフォルトの名無しさん
07/01/26 21:19:25
MSDNに書いてないわけがない
240:デフォルトの名無しさん
07/01/27 00:35:43
Inside Windows買っとけ
241:デフォルトの名無しさん
07/01/27 02:41:48
将棋プログラムを作っています。
すべての種類の駒が描かれている1枚のビットマップから
一部を切り出して(読み込んで)オブジェクトにするには
どうしたらいいでしょうか?
一つずつ別ファイルを用意しないとだめ?
242:デフォルトの名無しさん
07/01/27 07:26:34
>>238
ありがとう
243:デフォルトの名無しさん
07/01/27 13:30:33
VS2005 MFCシングルベースで、
CDC *pDC = GetDC();
AfxBeginThread(ここがわからない);
とメインの中に記述して、マルチスレッドでfunを使って、
funの中でpDCを↓のように使いたいのですが、どうすればいいでしょうか。
void fun(){
pDC->TextOutW(10,10,_T("aaa"));
}
244:デフォルトの名無しさん
07/01/27 13:33:03
MFCオブジェクトをスレッド間で受け渡してはいけない
245:デフォルトの名無しさん
07/01/27 13:44:20
>>244
そうなんですか・・・。
では、マルチスレッドのfunの中でpDCを使いたい場合はどうすればよろいのでしょうか。
246:デフォルトの名無しさん
07/01/27 13:49:29
馬鹿登場
247:デフォルトの名無しさん
07/01/27 13:58:14
>>245
ハンドル渡せば。
でもいろいろ面倒だから、描画関係はそのウィンドウが属するスレッドでやって
描画に関係ない処理を別スレッドでやる方がいいと思うけど。
248:デフォルトの名無しさん
07/01/27 14:16:57
キチガイにスレッド
249:デフォルトの名無しさん
07/01/27 14:50:03
>>244
なんで?
MSDNのサンプルでもMFCオブジェクトのポインタ渡してるよ。
まーpDCを渡すのはやばいけどね。
250:デフォルトの名無しさん
07/01/27 16:36:24
>>249
ハンドル-オブジェクトのテーブルがスレッド固有とかいろいろ。
詳しくはこの辺
URLリンク(msdn.microsoft.com)
251:デフォルトの名無しさん
07/01/27 17:37:52
>>250
注意点や、危険性とその回避方は書いてあるが >>244 のようなことは書いてないぞ。
非MFCスレッドでは出来ないと書いてあるけど。
252:デフォルトの名無しさん
07/01/27 17:45:10
>>251
>As a general rule, a thread can access only MFC objects that it created.
253:デフォルトの名無しさん
07/01/27 17:50:29
それは明らかにWindows Handle Mapsの説明でしょ。
254:デフォルトの名無しさん
07/01/27 17:54:52
>>253
>This is because temporary and permanent Windows handle maps are kept in thread local storage to ensure protection from simultaneous access from multiple threads.
HDC等もハンドルマップを持ってるから、同様な問題があるよ。
255:デフォルトの名無しさん
07/01/27 18:05:32
>>253
Windows Handle -> HANDLE, HWND, HDC, SOCKET…
Window Handle -> HWND
256:デフォルトの名無しさん
07/01/27 18:10:37
いや、そういうのは分かってるよ...
257:デフォルトの名無しさん
07/01/27 18:30:41
そもそも、別のスレッドから描画をする必要があるか、考え直したほうが良いな。
258:243
07/01/27 19:11:33
1秒ごとに1文字づつTextOutWで文字を表示していくプログラムを作るつもりなんです。
for(i=0;i<10;i++){
pDC->TextOutW(0,0,_T("aaa"));
Sleep(1000);
}
で、それを処理させながら他の処理ができるようにしたいのです。
こんな安易な考え方からスレッドを使おうとすることが間違いなのでしょうか。
OnTimerを使う方法以外で何かよい方法がありましたら是非教えてください。
それとも、やはりOnTimerを使うしかないのでしょうか。
259:デフォルトの名無しさん
07/01/27 19:13:56
タイマー使うのが一番簡単な方法だと思うが
260:243
07/01/27 19:15:21
>>259
了解しました。 ご回答ありがとうございました。
261:デフォルトの名無しさん
07/01/27 19:29:47
キチガイにふりまわされて真面目にレスしてたやつかわいそう
262:デフォルトの名無しさん
07/01/27 19:33:48
キチガイにスレッド
263:デフォルトの名無しさん
07/01/31 01:17:06
縦横のサイズを500で、ピクチャボックスの中には線が描かれており、、それを1600まで拡大して、
そのピクチャボックスの中の線の色を変更したり、線を書き足したりして、
書いたものを崩さずに任意のサイズまで縮小したんですけど、どうしたらいいのでしょうか?
できれば、500から1600に拡大して線を描くまでの過程を裏で処理できるようにしたいんですけど、
できるでしょうか?
264:デフォルトの名無しさん
07/01/31 08:40:51
BYTE byte[4] = {0XFF,0XFF,0XC1,0XC1};
DWORD dword;
でbyte⇔dword間で変換をしたいのですが
byte[0]から見て行って変換するしかないのでしょうか?
265:デフォルトの名無しさん
07/01/31 08:43:29
dword = *(DWORD *)byte
ただしエンディアンに注意
266:デフォルトの名無しさん
07/01/31 09:37:14
ワンリトルツーリトルスリーリトルエンディアン
267:デフォルトの名無しさん
07/01/31 12:15:09
エンディアン嘘付かない
268:デフォルトの名無しさん
07/02/01 00:43:04
>265-267
ありがと。リトルエンディアンになることに気をつける
269:デフォルトの名無しさん
07/02/01 05:09:18
【環境】
WinXP HomeEdition
Visual C++ 2005 Express Edition
『ねこでもわかるWindowsプログラミング』で勉強を始めたんですが
本に書いてある通りのプロジェクトの作成ができません。
テンプレートに「Win32 プロジェクトがありません」
アプリケーションウィザードで「Windowsアプリケーション」を選択できません。
ビルドしてもwindows.hが無いとエラーが出ます。
そもそもWindowsアプリケーションが作れないようになっていると感じるのですが
ExpressEditionではこれらの操作はできないのでしょうか?
270:デフォルトの名無しさん
07/02/01 05:18:46
>>269
ExpressEditionではPlatformSDK入れたら使えるみたい
271:デフォルトの名無しさん
07/02/01 07:46:13
いま、「スタンダードVC++」を買おうかなと思ってるんですが、本のなかの開発環境が.NETなんですが、覚えたことは2005でも使えますか?
272:デフォルトの名無しさん
07/02/01 08:27:51
>>271
使えるよ
猫でも級に内容が豊富で、EEでも一発でコンパイルが通るサイトがそろそろ欲しいな
でも俺が作ったら、どうしてもIDE関連やプロジェクトの設定で長々と語ってしまって、先に進めないんだよなー
273:デフォルトの名無しさん
07/02/01 08:56:49
無料だからやりはじめた初心者と
いままでVCやってた人のギャップが激しすぎる。
C#でもやってりゃいんだよ
274:デフォルトの名無しさん
07/02/01 08:59:09
シャープに決めるぜ
275:デフォルトの名無しさん
07/02/01 09:53:14
FindFirstFileで探したファイルをifstreamでファイルを開きたいんですけど、
どうしたらいいんでしょうか?
276:デフォルトの名無しさん
07/02/01 10:50:58
FindFirstFileでファイル名取れるだろ
277:デフォルトの名無しさん
07/02/01 10:53:45
URLリンク(msdn.microsoft.com)
FindFirstFile サンプル付
278:275
07/02/01 13:42:01
WIN32_FIND_DATA lp;
char pass[500] = "C:\\Documents and Settings\\abcde\\デスクトップ\\program\\適当\\DATA\\abc.txt";
HANDLE h = ::FindFirstFile(pass, &lp);
if(h != INVALID_HANDLE_VALUE){
ifstream in(lp.cFileName)
if(in){
m_list.InsertString(-1, lp.cFileName);
}
というふうにしたんですけど、ファイルの名前は取れるんですけど、
ファイルが開きません。
どこがまちがってるんでしょうか?
279:デフォルトの名無しさん
07/02/01 14:48:31
>>278
lp.cFileNameにどういうファイル名が取れてるか調べればわかるだろう
280:デフォルトの名無しさん
07/02/01 14:56:19
あっ できました!
ありがとうございました!
281:デフォルトの名無しさん
07/02/01 15:03:28
VC++7.0 MFCでメインウインドウを閉じたときに
全ての後処理開放処理の時間がかかるときがあるアプリケーションが
あると思います。そこで終了処理をある程度表示させて確認したいのですが
なにか良い方法はありますか?
282:デフォルトの名無しさん
07/02/01 15:14:44
どうだろ、、、WM_CLOSEとかDESTROYあたりでイベント作って
そのイベントとメッセージをWaitForMultipleObjectsで待ちつつメッセージループ作って
イベントがシグナルになったら閉じる処理の続きとかどうだろう
283:デフォルトの名無しさん
07/02/01 16:26:15
>>281
スプラッシュウィンドウ
284:デフォルトの名無しさん
07/02/01 17:58:31
スプラッシュマウンテン
285:デフォルトの名無しさん
07/02/01 18:10:28
スプラッシュムービー
286:デフォルトの名無しさん
07/02/01 22:14:03
VC++.NET2003 Windowsフォームを使用して開発しています。
1画面でかなり多くの数のコントロールを貼り付けているのですが、
デザイン画面を開くとき重くて時間が掛かっています。
また、Releaceでコンパイルしようとすると30分掛かっても終わりません。。
解決策はあるのでしょうか。
1画面で多くのコントロールを表示する理由は、
画面を切り替えずに複数の画面(?)を表示させるという仕様になっているからです。
今はパネルでコンテナ化し、各画面を出したい時にパネルの表示・非表示を
切り替えているのですが、正直限界です。
良い方法があればぜひ教えて下さい。
287:デフォルトの名無しさん
07/02/02 08:05:43
メモリを増やす
288:デフォルトの名無しさん
07/02/02 08:16:12
お母さんに相談する。
289:デフォルトの名無しさん
07/02/02 08:49:20
メモリは1ギガなんですけど・・・
それでも足りないとなると、他の人に委託しずらい等、
色々支障が出てくると思います。
それに、2ギガに増やして早さが倍になっても、
やっぱり遅い気がします。。
290:デフォルトの名無しさん
07/02/02 09:16:16
それはメモリの問題ではなくてCPUが余りにも余りにもなんではないだろうか。
291:デフォルトの名無しさん
07/02/02 10:23:42
でも1GBと2GBでは段違いの差が出る
292:デフォルトの名無しさん
07/02/02 10:49:16
数ヶ月前に購入したマシンなので、環境を変える事はできないです。
そこまで最新のマシンでなければ動かせないのは
やはりおかしいと思うんです。
画面を分け、あたかも1つの画面で動くように見せるという方法がありましたので、
それでやってみたいと思います。
ありがとうございました。
293:デフォルトの名無しさん
07/02/02 11:47:33
コントロール並べすぎなのがわるいと気づけ
294:デフォルトの名無しさん
07/02/02 12:31:10
それはもちろん分かってました。
だから、それ以外の方法があれば教えて欲しいと思い、
相談させてもらったのですが、、、。
295:デフォルトの名無しさん
07/02/02 12:40:13
コントロールが問題になるほど多数あるということは、それらの配置には規則性があるはずだ。
だとすれば、ポトペタせずに自前で生成すればいい。
296:デフォルトの名無しさん
07/02/02 19:54:33
うーん。
規則は、ある部分もあるのですが、
画面10枚分ぐらいのコントロールを1つのフォームで配置してるので
自分で書くのはちょっとしんどいですね。。
変わる可能性大ですし。
結局、ユーザーコントロールを画面分用意してやる事にしました。
297:デフォルトの名無しさん
07/02/02 23:51:25
……多いと思った段階で分けようって思わないもんかね。
298:デフォルトの名無しさん
07/02/03 00:14:14
MFC,SDIでCEditViewを使ってファイルから読み込んだ結果を
エディットボックスに表示しようと考えています。
表示の仕方は下記です。
void CtestView::setEditBox(char *str){
CEdit &edit = GetDitCtrl();
edit.SetWindowText(str); }
ファイルを読み込んで処理した結果をstrに入れるという感じです。
メニューのファイルオープンから読み込んだ場合は下記の
処理でいけるんですが・・・
CtestView *pView = ((CtestView*)(((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveView()));
pView->setEditBox(str);
実行ファイルにファイルをドロップして起動させた場合、
ドキュメントの
BOOL CtestDoc::OnOpenDocument(LPCTSTR lpszPathName)
に入るようですが、ここから上記のsetEditBox()を呼び出してもエラーに
なります。
原因は起動時でまだViewが出来ていないことであることは分かっているのですが、
どのタイミングで呼び出せばよいのか分かりません。
どうすればよいのでしょうか?
299:デフォルトの名無しさん
07/02/03 00:51:59
>>298
新しいドキュメントを開いたあとは必ず
void CtestView::OnInitialUpdate()
が呼び出されるので、そこで
setEditBox(GetDocument()->GetYourString());
300:デフォルトの名無しさん
07/02/03 06:22:59
ファイル読んで表示が終わってからもう一回表示しなおし?
読むときに処理すればいいのでは?
301:デフォルトの名無しさん
07/02/03 07:40:52
>>299
今環境がないので試せないですが、そのタイミングでは必ず
ビューが作成されているんですか?
>>300
読むときに処理すればいいんですが、アイコンにドロップして
起動させた場合はタイミングによってビューが作成されていないので
エラーになるんです。
302:デフォルトの名無しさん
07/02/03 07:44:51
表示しなおしじゃなく、299をやった上で
> CtestView *pView = ((CtestView*)(((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveView()));
> pView->setEditBox(str);
は当然削除だろ。個人的にはCtestDocにCtestView.hをincludeするのは、やってはいけない事だと思う。
303:デフォルトの名無しさん
07/02/03 07:48:31
>>301
ドキュメントを読んだあとにビューを更新するために用意されているメソッドだし
当然ビューは存在してるよ。
304:298
07/02/03 08:20:28
>>303
分かりました。
ありがとうございます。
305:デフォルトの名無しさん
07/02/03 09:14:25
>>272ありがとん
306:デフォルトの名無しさん
07/02/03 09:54:09
>>270
ありがとうございます。
せっかく教えて頂いたのにアレなんですが、インストールしようとしたところ
ちょっとCドライブの空きが足りなかったのでしばらくは秀丸とbccでやってみます。
307:いーぶいしー
07/02/03 16:42:45
クライアント(.exe)から
自分で作成したDLLに定義されているClassのpubicなメンバ変数に、アクセスしたい場合、
そのメンバ変数が構造体だと、その構造体の定義はクライアント側にも必要なのでしょうか?
定義を一箇所(DLL側のみ)にはできないのでしょうか?
308:デフォルトの名無しさん
07/02/03 16:49:16
>>307
もちろん必要、共通でinlcudeする*.hファイルに定義しておく。
C++/CLIのrefクラス、ref構造体は例外だけど
309:デフォルトの名無しさん
07/02/04 01:12:51
二色刷りで動物の絵が表紙にデカデカと書いてある本を探しているのですが、
何方かこの本の題名を知らないでしょうか?
なんでも辞書みたいな感じの本で延々とコードが書いてあるらしいのですが。
あとみなさんはどのような本で勉強していますか?
ちなみに僕は学校の授業でやったもののほぼ未経験です。
310:デフォルトの名無しさん
07/02/04 01:52:01
> 動物の絵が表紙にデカデカと書いてある本
沢山あるぞ。好きなのを選ぶが良い。
URLリンク(www.oreilly.co.jp)
> どのような本
一冊で完結なんて出来ないんだから
自分の目的にあった本を
(良い意味で)適当に買いつづけていけばいいと思うよ。
↓参考
推薦図書/必読書のためのスレッド PART33
スレリンク(tech板)l50
311:デフォルトの名無しさん
07/02/04 18:14:46
すいません。御存知の方がいたら教えてください。
環境:Windows XP,VC++6.0 「_MBCS」指定
Windowsのアプリを作っているのですが、リストビューの部分のみにUnicode文字のデータを表示
させたいので以下のようにリストビューの部分のみワイド文字仕様の構造体を使用しています。
リストビュー設定部のソース
static HWND hList;
LV_COLUMNW lvcol;LV_ITEMW item;
InitCommonControls();
hList = CreateWindowExW(0,WC_LISTVIEWW, L"",WS_CHILD | WS_VISIBLE | LVS_REPORT,
0, 0, 300, 200,hWnd,(HMENU)ID_LISTVIEW,hInst,NULL);
lvcol.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvcol.fmt = LVCFMT_LEFT; lvcol.cx = 100;
lvcol.pszText = L"項目1"; lvcol.iSubItem = 0;
ListView_InsertColumn(hList, 0, &lvcol);
item.mask = LVIF_TEXT; item.pszText = L"内容1";
item.iItem = 0;item.iSubItem = 0;
ListView_InsertItem(hList, &item);
これで実行すると、リストビュー部に表示される文字が全て16進で表示されてしまいます。
正常に「項目1」,「内容1」で表示させる方法は、無いのでしょうか?
ListView_InsertColumnの部分のヘッダファイルを見ると
#define ListView_InsertColumn(hwnd, iCol, pcol) \
(int)SNDMSG((hwnd), LVM_INSERTCOLUMN, (WPARAM)(int)(iCol), (LPARAM)(const LV_COLUMN FAR*)(pcol))
となっているから無理なのかな?よろしくお願いします。
312:デフォルトの名無しさん
07/02/04 18:39:30
>>311
とりあえずListView_InsertColumn中のSNDMSGがSendMessageAになってる。
LVM_INSERTCOLUMNもAつきのほうだし。
マクロは全滅なきがする。
313:311
07/02/04 21:09:25
>>312
ありがとう。
やっぱプロジェクト自体をUnicode仕様にするしかないのかな?
>マクロは全滅なきがする。
マクロ以外で実現する方法ってあるの?
314:311
07/02/04 21:25:03
とりあえず以下のように自分でマクロを作ってみたらうまく表示できた。
#define ListView_InsertColumn_W(hwnd, iCol, pcol) \
(int)SendMessageW((hwnd), LVM_INSERTCOLUMNW, (WPARAM)(int)(iCol), (LPARAM)(const LV_COLUMNW FAR*)(pcol))
これだけで問題ないんだろうか?
315:デフォルトの名無しさん
07/02/04 21:38:50
>>311-312
SNDMSGは単にSendMessageとして定義されているから、
当然プログラム全体をUNICODE化すればマクロがそのまま使えるんだ。
逆に言えばSendMessageがSendMessageWになりさえすればいいわけだから、
UNICODEとしてマクロを使いたい部分の前にこれ、
#pragma push_macro("SendMessage")
#undef SendMessage
#define SendMessage SendMessageW
後に#pragma pop_macro("SendMessage")を置けばいけると思う。
push_macro/pop_macroがVC6でも使えるかどうかは知らないけど。
316:311
07/02/04 22:00:59
>>315
ありがとう。
#pragma push_macro("SendMessage")
#undef SendMessage
#define SendMessage SendMessageW
InitCommonControls();
:
:
item.mask = LVIF_TEXT; item.pszText = L"内容1";
item.iItem = 0;item.iSubItem = 0;
ListView_InsertItem(hList, &item);
#pragma pop_macro("SendMessage")
上記のように修正してみたが、コンパイルは通ったが、表示結果は16進のままだった。
VC++6.0では、push_macro/pop_macroが使えないのかもしれない。
>>314に書いた方法でやってみます。
ありがとう。
317:298
07/02/06 07:43:06
OnInitialUpdate() で実行することが出来ました。
もう一つ教えてください。
エディットボックスなどのコントロールの初期化処理を
したいのですが、どのタイミングでやればいいんでしょうか?
WM_CREATEではまだコントロールが作成されていません。
OnInitialUpdate() では問題ないのですが、最初の一度だけと
いう訳にはいきません。
static BOOL flag;
を使ってifで判定して最初だけ実行すれば出来たのですが、
もっとスマートな方法はありますでしょうか?
318:デフォルトの名無しさん
07/02/06 08:54:09
OnInitialUpdateは最初の一度という意味
319:デフォルトの名無しさん
07/02/06 10:39:28
>>317
Documentが変わってもView内のコントロールの位置やサイズが変わらない
タイプのアプリの場合は、自分もOnInitialUpdateでstaticなフラグ使って
一回だけやってる。特に問題ないと思うけど。
これ以上はアプリ形態と初期化内容が判らない限り何ともいえない。
320:デフォルトの名無しさん
07/02/06 16:24:36
ヘッダファイルに変数を追加するだけで
アプリケーション起動時にOSがエラーを出してくることがあります
もう一つ二つ意味のない変数を追加すれば治ることもあるのですが
これはどうしてなのですか?変数追加だけなので
プログラムの中で使ってもいません名前も被っていないです
どんな変数でもこの症状が起こるときは起こります
321:デフォルトの名無しさん
07/02/06 16:28:09
領域外アクセスとかのバグが変数追加で表面化したんだろ
322:デフォルトの名無しさん
07/02/06 16:29:38
つまり他の変数になにか問題があるということですか?
323:デフォルトの名無しさん
07/02/06 16:41:35
Runtime Error!
Program:_xxxxxxxxxxx ←exeの場所
abnormal program termination
こんな感じで表示されます
今回は他の変数を追加しても直りません
助けてください。アクセス外ということは文字列かなにか
静的に領域をとってる配列等が原因なのでしょうか?
324:デフォルトの名無しさん
07/02/06 16:48:23
文字列20文字もいらない文字の領域を200にしたらいけました
うーん無駄に領域を確保すれば直るなんて謎だ
325:デフォルトの名無しさん
07/02/06 16:54:18
謎っつーか、メモリの管理がすげー甘いんじゃなかろうか
一度きっちり調べ直してみることをお薦めする
326:デフォルトの名無しさん
07/02/06 17:14:52
すいません独学なんですがメモリ管理では
全てのメンバ変数にdeleteをしたほうがいいのでしょうか?
327:デフォルトの名無しさん
07/02/06 17:19:11
newしたものにはdelete、new[]したものにはdelete[]。
逆にnewしていないものにdeleteは要らない。
ただし可能な限り、std::vectorなどnew[]/delete[]を隠匿したものを使ったり、
boost::shared_ptr/arrayやboost::scoped_ptr/array、std::auto_ptrなど、
せめてdelete/delete[]だけでも隠匿して使うようにすべき。
328:デフォルトの名無しさん
07/02/06 17:22:56
文字列などは配列で静的に確保しないほうがいいのでしょうか?
newで動的確保するべきなのですか?
329:デフォルトの名無しさん
07/02/06 17:26:58
大量にバッファを必要とするのならともかく、
そうでないのなら静的確保で十分
330:デフォルトの名無しさん
07/02/06 17:30:17
私はその他のオブジェクトもnewで動的確保はしていませんでしたので
deleteを使うところが見当たりません
原因は全て静的にしているせいなのでしょうか?
331:デフォルトの名無しさん
07/02/06 17:36:36
いまだにdllの仕組みが理解できません。
猫でものホームページ見ながら作ってみたんですが
dllを作った時のヘッダを含めて
かつその時出来たlibファイルを
#pragma comment(lib,"〜.lib)
か、リンカの設定でリンクしないと使えないのは
libを通してやらないと、dll内の関数を呼び出すことは出来ないと
いう事なんでしょうか。
LoadLibraryを使っても意味無かったので、よくわからないです。
どなたか教えて頂ければ幸いです。
VS2005というIDE環境で勉強してるから楽出来てる分その楽
出来ている理由が解って無く勉強不足になってると自らは思います。
332:デフォルトの名無しさん
07/02/06 17:41:21
>>330
「静的」「動的」の意味が分かっていないような気がする。
コードの中で
int i;
char String[80];
とかやるのが「静的確保」。これらの変数は実行ファイルがメモリ上に
ロードされた時点で既に存在していて、終了と同時に消滅する。
グローバル変数だろうが(クラスの)メンバ変数だろうがそれは同じ。
したがって delete/delete[] は必要ない。
333:デフォルトの名無しさん
07/02/06 17:48:03
>>331
LoadLibraryで読み込んだDLLの関数を呼び出すには、
GetProcAddressで関数のアドレスを取得するんだよ。
334:デフォルトの名無しさん
07/02/06 17:49:34
>>331
VS2005で「DLLを作る」と言ったときには自動的にLIBファイルも作られるけど、
この2つは完全に別種のもの。中身は一緒、ただ使い方が違う。
LIBファイルは静的リンク用のファイル。
自分の実行ファイルの中に(コンパイルの時点で)取り込んでしまって、
あたかも自分の書いたコードと同じように使えます、というもの。
だからLIBを組み込むときにはリンカなり#pragmaなりで予め設定をして、
コンパイルのときにリンクすることを明示しなければならない。
DLLは動的リンク用のファイル。
一般的には、まずLoadLibrary()でDLLファイルを読み込み、
(そこでもし成功したなら)次にGetProcAddress()で
DLLの中に埋め込まれた関数を取り出して使う、
最後にFreeLibrary()でDLLを自分のプログラムから取り外す、
という段取りを踏む。
コンパイル時には存在しなくても構わない、実行時にあればいい。
335:デフォルトの名無しさん
07/02/06 17:55:16
>>332
うーんということは私が知らず知らずのうちに
どこかで動的確保しているということでしょうか?
336:デフォルトの名無しさん
07/02/06 18:02:34
>>334
>VS2005で「DLLを作る」と言ったときには自動的にLIBファイルも作られるけど、
このLIBはインポートトライブラリ。
LoadLibraryやらGetProcAddressやらメンドクサイ処理をしてくれる短いモジュール。
これを静的にリンクすればDLLの呼び出しが簡単に出来る。
インポートトライブラリがあるなら極力使ったほうが楽。
337:デフォルトの名無しさん
07/02/06 18:05:31
インポートトライブラリ
インポートトトライブラリ
インポートトトトライブラリ
338:320
07/02/06 18:12:06
スレッドオブジェクトの配列をグローバル変数にしてるんですが
これはまずいですか?せめて原因をつきとめたいです
339:デフォルトの名無しさん
07/02/06 18:12:57
>>335
動的確保はスタックに積むケースとnewやmallocなどでヒープから確保するケースがある。
静的確保はstaticで定義した場合(明示的にstaticをg使わないケースも含む)
クラス内のメンバー変数はクラスがどう生成されたかによる。
>>336
誤字をさらにコピーしてしまったか、インポートライブラリだな。
340:331
07/02/06 18:44:51
>>333さん
>>334さん
>>336さん
ご教授ありがとうございました。
GetProcAddress()FreeLibrary()ってのも必要なんですね。
それと、dll作った時のlibはインポートライブラリなんですね。
「プログラムはなぜ動くのか」って本を読んだにもかかわらず
流し読みで頭に入っておらず再読したらちゃんと書いてありました。
はぁ、馬鹿だな俺って。
341:デフォルトの名無しさん
07/02/06 19:56:07
SendMessageであるウィンドウにDボタンを送りたいのですが、
SendMessage(hwnd,
このあとをどうすればよいのでしょうか。
ご教授願います。
342:デフォルトの名無しさん
07/02/06 20:06:34
>はぁ、馬鹿だな俺って。
それに気がつくことができれば、今後はもっと「馬鹿」じゃなくなるでしょう。
そうやって向上できる人間が、「賢い」のです。
#で、「ご教示」ですね。
>>320
ソース公開しちゃった方が話が早そうですね。
343:デフォルトの名無しさん
07/02/06 20:07:43
>>341
Dボタンってなんですか?
マウスクリックのイベントを送りたいなら、Spy++でどういうパラメータを渡せばいいか覗いてみると宜しいかと。
344:317
07/02/06 21:25:08
>>319
フラグを使うのは普通なんですね。
ありがとうございました。
345:デフォルトの名無しさん
07/02/07 00:17:13
>>320
いろいろ言われてるけど、とりあえず
配列利用時に、添え字がオーバーアクセスしてないか確認するべし。
> 原因を突き止めたい
デバッガを上手に利用しましょう。
ある特定のメモリ空間にアクセスした時にbreakかけることも出来たはず。
詳しくは「ブレークポイント」をMSDNで調べてくれ。
346:デフォルトの名無しさん
07/02/07 00:59:43
基礎的すぎる質問なんですが、
ダイアログエディタで適当にあれこれコントロールを張ったとき、
VC++2003でビルドしたプログラムを98SEで走らせると、
コントロールのマルチバイト文字がすべて文字化けする。
エディットボックスに直接マルチバイト文字入れても同じく。
メニューバーやステータスバーは文字化けしない。
文字はTCHAR系統を使い、ビルドした結果はすべてwchar_tになっているはず。
このような状況で、文字化けさせない用にする方法を教えてくださいませんでしょうか?
347:デフォルトの名無しさん
07/02/07 01:47:02
9xはUNICODE対応していないから、MSLUを使うか非UNICODEにするかしないとだめだよ。
348:デフォルトの名無しさん
07/02/07 02:07:28
2000とXPは内部コードはUnicodeだけど98とかはどうなんだろう。
localeまわりかな?Unicode適応しないでビルドしたらSJISになっていけるのかな?
349:デフォルトの名無しさん
07/02/07 02:23:29
>>347
なるほど…
わかりました。
ありがとうございました。
350:デフォルトの名無しさん
07/02/07 09:03:22
>>346
マルチバイト文字(列) と ワイド文字(列) の意味を
使い分けられて無い気がするぞ。
マルチバイト文字列は char* で
ワイド文字列は wchar_t* だ。
351:デフォルトの名無しさん
07/02/07 10:14:21
そもそもダイアログでコードページ932で作ってたりして
352:デフォルトの名無しさん
07/02/07 10:18:25
クラスのメンバ変数についての質問です
グローバル変数としてビュークラスの外で宣言したクラスの
メンバ変数は0や空文字で初期化されてるんですが
そのクラスをビュークラスのメンバとして宣言するとそのクラスの
メンバ変数が初期化されないのはどうしてですか?
353:デフォルトの名無しさん
07/02/07 10:26:03
>>352
C++スレ行くか
C++の入門書でも読んで勉強してください
354:デフォルトの名無しさん
07/02/07 10:31:05
>>353
わからないんですね
355:デフォルトの名無しさん
07/02/07 10:36:05
入門書にしっかり書いてある
356:デフォルトの名無しさん
07/02/07 10:39:04
スレリンク(tech板)
ではここで教えてください
357:デフォルトの名無しさん
07/02/07 11:03:34
グローバル変数はコンパイル時に場所が決まってるから
358:デフォルトの名無しさん
07/02/07 16:30:17
というより、C/C++の規格でそうなると定められているためと言ったほうがいいと思う。
359:デフォルトの名無しさん
07/02/07 16:33:10
どうだろね。
仕組みから入ったほうが、そう決まってるからそうなんだ、より納得いくかもしれんし
360:デフォルトの名無しさん
07/02/07 17:01:56
実装がそうだからそれが正しいという保証はどこにもない
361:デフォルトの名無しさん
07/02/07 17:25:43
逆にこれは実装が先にあって仕様が追いついた例でもあるな。
構造体のコピーも似たようなもの。
362:デフォルトの名無しさん
07/02/07 18:49:23
VC++7.0でライブラリファイルをリンクする方法を教えてください
winsockライブラリを使いたいのでお願いします
363:デフォルトの名無しさん
07/02/07 19:23:53
#pragma comment(lib, "Mswsock.lib")
364:269
07/02/08 08:10:55
269です。たびたび申し訳ありません。
SDK入れてWindowsアプリが作れるようになったんですが、ダイアログやアクセレータ等の
リソーススクリプトファイル(.rc)をエディットするResEditorがついてないみたいなので断念しそうです。
というかそれが目的だったので。
Windowsフォーム(.h)は作れるみたいですがどうしていいのかわかんないです。
Visual Studio 2005 Academic Editionだったらリソーススクリプトファイル(.rc)の作成は可能でしょうか?
可能ならば購入したいと思います。よろしくお願いします。
365:デフォルトの名無しさん
07/02/08 10:01:56
MSに訊け
366:デフォルトの名無しさん
07/02/08 10:07:23
>>363
ありがとうございます
367:デフォルトの名無しさん
07/02/08 10:35:00
>>364
可能だがフリーのエディタもあるよ
368:デフォルトの名無しさん
07/02/08 11:04:04
メモ帳でええがな
369:デフォルトの名無しさん
07/02/08 11:50:13
VisualStudio2005C++ExpressEditionにて
#include "stdafx.h"
#include"stdio.h"
int _tmain(int argc, _TCHAR* argv[])
{
FILE *fp=fopen("d:/test.txt","rw");
というコードを書きました。
FILE文付近で「〜Expression:(Invalid file open mode",0)〜」
というダイアログボックスがでます。
CRTセキュリティ強化されたためということですが、このセキュリティを
弱くしたいと思います。どのようにすればよいですか?
370:デフォルトの名無しさん
07/02/08 11:50:39
WinSockのAPIを使ってphpから文字列を取得することはできますか?
371:デフォルトの名無しさん
07/02/08 12:12:23
>>369
セキュリティ強化用の関数が追加されたけど
標準関数の仕様はかわらないのでは?
372:デフォルトの名無しさん
07/02/08 12:18:22
>>370
プロトコル次第
373:デフォルトの名無しさん
07/02/08 12:20:17
>>372
httpなんですが
あとサーバーに送る文字列の改行コードは\nで大丈夫でしょうか?
374:デフォルトの名無しさん
07/02/08 13:09:22
>>371
標準関数の仕様はかわらないのでは?
たぶんそうだと思うのですがうまくいかないです。
375:デフォルトの名無しさん
07/02/08 13:18:46
エラー通り"rw"が悪い
376:デフォルトの名無しさん
07/02/08 14:04:09
>>275
VisualStudio2003だとうまくいくのですが、
構文的にrwなんてつけたらだめなのですか?
377:デフォルトの名無しさん
07/02/08 15:05:50
unicodeかなんかじゃないの?
378:デフォルトの名無しさん
07/02/08 15:56:14
"rw" なんてのは無い
379:デフォルトの名無しさん
07/02/08 16:37:09
MSDNこういう例ものってるし "rw" もあるだろ
URLリンク(msdn2.microsoft.com)(VS.80).aspx
fopen("newfile.txt", "rw, ccs=<encoding>");
380:デフォルトの名無しさん
07/02/08 17:11:52
多分すごい有名な
「新VisualC++6.0入門ビギナー編 林春比古署 ソフトバンク社」
を使って今勉強中なんですが、
241ページのサンプルプログラムで、
CPenクラスのオブジェクトのポインタ、’oldPen’ってゆうのを、
’旧ペン’と銘打って保存って書いてありますが、
これをする意味がわかりません。
わざわざポインタでなぜ確保しているのでしょうか?
pDC->SelectObject(&CPen型Object)で選択して書くだけなのに、
別に’旧ペン’を保存しておく必要があるのでしょうか?
私が簡単に確認した程度では、
oldPen 自体設定しなくても実行可能でしたし、
最後に’旧ブラシに戻す’ってゆう作業もなくても問題ありませんでした。
他にもいろいろ記述してoldPenの有用な使い方を検証しましたが、
やればやるほど意味がないのではという考えに傾きます。
大変限定的な質問ですが、
よければ本を持ってる方、もしくはよく知ってらっしゃる方でわかる方がいれば
教えていただけないでしょうか?
381:デフォルトの名無しさん
07/02/08 17:21:08
MSDNのサンプルだとこんな感じだね
void CMyView::OnDraw( CDC* pDC )
{
CPen penBlack; // Construct it, then initialize
if( newPen.CreatePen( PS_SOLID, 2, RGB(0,0,0) ) )
{
// Select it into the device context
// Save the old pen at the same time
CPen* pOldPen = pDC->SelectObject( &penBlack );
// Draw with the pen
pDC->MoveTo(...);
pDC->LineTo(...);
// Restore the old pen to the device context
pDC->SelectObject( pOldPen );
}
else
{
// Alert the user that resources are low
}
}
382:デフォルトの名無しさん
07/02/08 17:24:47
URLリンク(forums.belution.com)
メモリ上のDCは元に戻すべきか?
383:デフォルトの名無しさん
07/02/08 17:24:47
>>380
URLリンク(msdn2.microsoft.com)
>An application should always replace a new object with the original, default object after it has finished drawing with the new object.
384:デフォルトの名無しさん
07/02/08 17:28:50
げ、マルチか
385:デフォルトの名無しさん
07/02/08 18:10:14
だな
スレリンク(tech板:200-番)
386:デフォルトの名無しさん
07/02/08 18:56:26
>>379
VS2005でソースみてみな
387:デフォルトの名無しさん
07/02/08 20:16:15
プログラムからtabindexの設定をするには?
388:デフォルトの名無しさん
07/02/08 20:20:28
>>369>>379
C/C++の標準規格としては"rw"なんてありません。
標準で認められているのは"r", "w", "a", "r+", "w+", "a+"及び
それにバイナリモードのbを2-3文字目(+とは順不同)に入れたもののみです。
勿論Visual C++はViusal C++で色々と独自に拡張はしていますが。
389:デフォルトの名無しさん
07/02/10 17:51:19
WinSockでhttpsを扱えますか?
390:デフォルトの名無しさん
07/02/10 18:07:09
扱えるかどうかと言えば扱える
ソケットとプロトコルは関係ない
要はアプリケーションがWinSockを使ってSSL通信できるように作ればいい
391:デフォルトの名無しさん
07/02/10 18:49:44
>>390
ありがとうございます少し調べてみます
392:デフォルトの名無しさん
07/02/11 01:39:25
【初心者歓迎】C/C++室 Ver.34【環境依存OK】
で聞いたらスレ違いという事でここでオナガイシマス
VC6ですCtrl + Fで検索ダイアログを開いた時過去に検索した文字が出せますが
便利ですが間違えた検索単語を間違えたときの文字も残っています
一度まっさらにするにはどうしたら良いですか?
393:デフォルトの名無しさん
07/02/11 06:19:07
パソコン初心者だろうか?
394:デフォルトの名無しさん
07/02/11 09:42:36
WinFormsのTextBoxで、
テキストの行がコントロールからはみ出たら最終行がきちんと見えるように
オートスクロールさせたいのですが
デザイナ内にもそれらしき設定はなさそうですし、
マニュアルでプロパティを調べてもそれっぽいものが見当たりません。
どうしたらいいでしょうか?
AutoScrollOffsetってのがそうですか?
なんかPointでスクロール先を指定するみたいですが、
もしこれがそうなら使い方が良く分からないので教えてください。
395:394
07/02/11 10:10:49
とりあえず格好悪いですが
textBox->SelectAll();
textBox->ScrollToCaret();
でできました。
396:デフォルトの名無しさん
07/02/11 12:27:54
ヒント
・オートスクロールが有効になっている場合、自動的にキャレットのある位置が表示されるようにスクロールされる
・TextBox::SelectionStartが現在のキャレットの位置
397:デフォルトの名無しさん
07/02/11 14:46:27
392ですがどうしたら消せる?
398:デフォルトの名無しさん
07/02/11 15:02:24
レジストリ辺りにでも保存されてるんじゃねーかな。
もしくは再インストール。
399:デフォルトの名無しさん
07/02/11 23:32:04
Lap[Count - 1] + Step >
(Lap[Count] = GetTickCount())
);/* case 2: の timeGetTime の部分*/
Stepが0以外だとStepに関わらず、このループを抜けるのに15ms以上もかかってしまいます。(Lap配列の数値を見て)
最初のtimeGetTimeの10万回ループは47msで遅いわけでもないですし、そもそもtimeGetTimeだとうまく動くのです。
どうしたらよいのでしょうか。
400:デフォルトの名無しさん
07/02/11 23:43:08
いったいそれのどのあたりがループなんだ?
401:399
07/02/11 23:50:06
>>400
ソースはってませんでした。
URLリンク(deaikei.biz)
pass:cpp
#pragma comment(lib, "winmm.lib")を追加したら、
timeGetTime()とGetTickCount()の両方でうまく時間が出てこなくなってしまいました。
元に戻してもダメなので、ビルドする度に違うのかもしれません…
402:デフォルトの名無しさん
07/02/12 00:07:11
まず、ビジーループ氏ね
それに、timeGetTimeのNTでの規定精度は「5ms以上」
ついでに、強制コンテキストスイッチの間隔もある。
403:399
07/02/12 00:29:54
>>402
試しに比較したかっただけなので、ループの方は勘弁してください。
timeBeginPeriodで精度を1msに調整しても結局GetTickCountで同様の症状になってしまいます。
コンテキストスイッチの待ち時間は10msを超えるようなものでしたっけ?
404:デフォルトの名無しさん
07/02/12 02:17:41
GetTickCountのヘルプ読んだか?
家のPCだと100ns単位で156250、約16ms程度の解像度だぞ。
405:デフォルトの名無しさん
07/02/12 08:24:06
普通1/60秒だからそんなもんだね。
406:399
07/02/12 19:24:33
>>404-405
ようやく理解できました。
Sleep(0)ループのようにタイマー割り込みを待つのですね…
GetSystemTimeAdjustmentで測ってみたら15.625msでした。
407:デフォルトの名無しさん
07/02/13 12:47:54
CString型のメンバ変数strに文字列をいれていたのに
突然中身がなくなるというかデバッグ時にみると不適切なptr
となってアドレスは0を指しているようでした
関数から関数を呼び出してさらに関数をよびだしていきどんどん奥にいくと
この現象が起きたのですが
これはスタックオーバーフローというものですか?
解決策を教えてください
408:デフォルトの名無しさん
07/02/13 12:49:09
>>407
関数一個ずつ丹念にデバッガで追っていくのが無難かな。
スタックオーバーフローにしろ領域破壊にしろ、どっかで誰かがなんかやってるだろうから。
409:デフォルトの名無しさん
07/02/13 13:00:34
>>408
ありがとうございます!!
strncpyで領域破壊を起こしていました
すごく助かりました!!
410:デフォルトの名無しさん
07/02/13 14:14:12
私はもともとC++Builder出身なのですが
VB6で、あるアプリを作成しています。
このアプリは、主処理のほとんどが
MS.NET Framework1.1 VC++.NET
で生成されたDLLで行われています。
このDLLをステップ実行やインスペクタでデバグしたいのです
が、親アプリがVBなので、どうやってデバグしたら良いやら
困り果ててます。
どなたかVC++のDLLのデバグ方法を伝授してください…
できれば簡単なやつで。
411:デフォルトの名無しさん
07/02/13 14:50:21
ソースとデバッグ版DLLとpdbファイルがあればおk
412:デフォルトの名無しさん
07/02/13 14:54:59
ソース、デバッグ版DLL、pdbファイルあります!
もちょっとだけ具体的に教えてもらえないでしょうか…
413:デフォルトの名無しさん
07/02/13 15:32:24
それって開発環境そのまま?
途中で止めてアタッチする手もあるが、環境あるなら
DLLのデバッグ開始すると、実行時にEXE指定しろって言ってくるから
それでそのEXE指定すればいいと思う。
デバッグしたいとこはブレークポイント設定しておけばいいし。
414:デフォルトの名無しさん
07/02/13 15:35:06
もしVB側もデバッグしてるのなら、関数呼び出し時にステップインで
DLLとPDBが同じとこにあればソースの場所聞いてくると思うので
そこでソース選べば追えると思うけど、、、
VB呼び出しはもしかしたら違うかもしれん、、、
C/C++からの呼び出ししかやったことないんで。
もしだめなら試すから言ってくれ
415:デフォルトの名無しさん
07/02/13 18:25:23
>>413-414
丁寧なご回答ありがとうございます。
でもまだちょっと分かってないです…
DLLですが、メイク時に実行すると
「ActiveXコントロールテストコンテナ」というのが
出ます。
これかのことか!?と思ったのですが、EXE指定はできないっぽいです。
>>414さんの方法は今がんがってる最中です…
416:デフォルトの名無しさん
07/02/13 20:56:40
質問です。
学校で使っている描画のプログラム(?)をVC++6.0で使いたいと思い、
ヘッダーファイルとライブラリファイルを
Microsoft Visual Studio\VC98 のIncludeフォルダとLibフォルダにそれぞれ入れ、
プログラムをコンパイルしたのですが、
warning LNK4003: ライブラリの形式が無効です; ライブラリは無視されます
とエラーになってしまいます。
これと同様のことをBCC5.5でしても問題ありませんでした。
何か間違っているところがあれば是非教えてください。
417:デフォルトの名無しさん
07/02/13 21:01:20
ライブラリがBCC用なんだろ。
418:418
07/02/13 21:40:29
>>417
Win32 Static Libraryでプロジェクトを作りそこにライブラリソースを追加しビルドしました。
そしてできたライブラリファイルで再び試してみると、
ライブラリの形式が無効です このエラーはでなくなりましたが、
LNK2001 :外部シンボル"関数名"は未解決です このエラーは消えませんでした。
ライブラリファイルの作り方もよくわからなかったのですが合っているでしょうか?
419:デフォルトの名無しさん
07/02/13 21:41:53
"関数名"が、そのライブラリに入っているべきものなら、
どっか、あってないんだろ。
420:デフォルトの名無しさん
07/02/13 22:36:39
.NETでダイアログベースで作ってます。
CRectとGetWindowRectを使用して自身の座標を得ることはできたのですが
自身と関係ないWindowの座標を得る場合にはどうしたらいいんでしょうか?
421:デフォルトの名無しさん
07/02/14 00:22:20
GetWindowRectだな。
必要とするウィンドウのハンドルを取得するべし。。
.NET Frameworks だけじゃ無理な気がしたので、WinAPI を使いましょう。
422:デフォルトの名無しさん
07/02/14 12:19:22
エディットコントロールにintの中身を表示させるにはどうしたらいいんですか?
文字列は"”でできました。
変数だけ書いたらエラーでました。
423:デフォルトの名無しさん
07/02/14 12:33:45
釣れますか?
424:デフォルトの名無しさん
07/02/14 14:47:48
編集制御->文字列 = 文字列にな〜れ(数値);
425:デフォルトの名無しさん
07/02/14 16:27:57
>>420
なぜ.NETでCRectとGetWindowRectが出てくる?
426:デフォルトの名無しさん
07/02/14 17:05:59
VC6.0でベースがDIALOGか、SDIで出力結果をDOS窓に出す方法はあるんですか。
はじめからDOS窓アプリにしないとだめですか?
427:デフォルトの名無しさん
07/02/14 17:13:21
AllocConsole?
428:デフォルトの名無しさん
07/02/14 17:18:42
VC++プログラマーちょっとこい!!
スレリンク(news4vip板)
429:デフォルトの名無しさん
07/02/14 17:31:05
CTypedPtrList<CObList, VALUE*>のSeqValueListを
CTypedPtrList<CObArray, VALUE*>にする時ってどうすればいいんでしょうか?
下のがソースなんですが、やり方が良くわからない。。。orz
CItemInfo::~CItemInfo(){
int iCount;
POSITION pos;
VALUE *pValue;
m_pValueList = &m_SeqValueList;
iCount = (int)m_pValueList->GetCount( );
pos = m_pValueList->GetHeadPosition( );
for( int i=0; i<iCount; i++ ){
pValue = m_pValueList->GetNext( pos );
delete pValue;
}
m_pValueList->RemoveAll();
m_pValueList = &m_ParValueList;
iCount = (int)m_pValueList->GetCount( );
pos = m_pValueList->GetHeadPosition( );
for( int i=0; i<iCount; i++ ){
pValue = m_pValueList->GetNext( pos );
delete pValue;
}
m_pValueList->RemoveAll();
}
430:426
07/02/14 17:36:11
AllocConsole();
freopen("con", "w", stdout);
printf("hello console\r\n");
//FreeConsole();
でできました。すみません。
431:デフォルトの名無しさん
07/02/14 17:54:01
エディタの背景を黒にカスタマイズしたいのですが、どこにもそんな項目がありません
ちなみにヴァージョン6.0です
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4328日前に更新/201 KB
担当:undef