■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

VisualC++相談室 3
251 名前:デフォルトの名無しさん :2001/07/22(日) 17:28
>249
なるほど、そういうことですか。おかげでできました。どうもありがとうございました。

252 名前:デフォルトの名無しさん :2001/07/22(日) 19:28
VCで
関数呼び出しを書くときに
括弧まで書いたら、引数一覧が出るのですが
この機能の名称ってなんですか?
あと、表示できない時があるのですか、表示可能な条件とかも教えてください。
(うちのノートだと表示するのですがデスクトップだと表示しないです)
構造体メンバを示す時にも表示できるのもおねがいします

253 名前:いお :2001/07/22(日) 21:07
たしか
「IntelliSense」というやつだったよーな

254 名前:デフォルトの名無しさん :2001/07/22(日) 23:05
>>252

パッケージ読め。
またはMSDN読め。

あとIntelliSenceはClassWizardから情報を引っ張ってきていて
ClassWizardはわりとよくこける。
こけるとメンバ表示されなくなる。

のでメンバが表示されなくなったらVCを再起動すれば
直ることが多い。

> 表示可能な条件
ClassWizardが情報を認識していること。以上。ClassView見れ。

255 名前:252 :2001/07/22(日) 23:29
「IntelliSense」って名称がわからなかったので、調べようにも。
名称わかったのでMSDN読んだ調べた。
わかりました。
ありがとうございます。

256 名前:デフォルトの名無しさん :2001/07/23(月) 04:40
C++は、もう破滅寸前。
ここらでSTLに挫折した、全体の95%相当のプログラマが
不買運動を起こし、消滅します。

ありがとうC言語!そしてC++さようなら!(^_^)また会えるといいね!

http://piza.2ch.net/test/read.cgi?bbs=tech&key=995820118&ls=100

257 名前:デフォルトの名無しさん :2001/07/23(月) 05:19
>>256
(゚Д゚)ハァ?

258 名前:これってバグだべ :2001/07/23(月) 06:13
#include <stdio.h>
#include <windows.h>
static char szMsg[] = "String";
static short wDlgData[] = { LOWORD(szMsg), HIWORD(szMsg) };
void main(void)
{
printf("%08lX\n", szMsg);
printf("%04X:%04X\n", wDlgData[0], wDlgData[1]);
printf("%04X:%04X\n", LOWORD(szMsg), HIWORD(szMsg));
}
上のソースをコンパイル & 実行すると結果が以下のようになる。
0040E030
0000:0040
E030:0040
コンパイラはVC++6.0、回避方法無いかナ〜?

259 名前:デフォルトの名無しさん :2001/07/23(月) 06:30
>>258
なんでそんなわけわかんないコードにする意味が全く理解できないが、
static short wDlgData[] = { LOWORD(szMsg), HIWORD(szMsg) };

static long num = (long)szMsg;
static short wDlgData[] = { LOWORD(num), HIWORD(num) };
で回避できるようだ。

260 名前:デフォルトの名無しさん :2001/07/23(月) 07:15
>>259
おぉ!なるほど〜
> なんでそんなわけわか
コンパイルされたダイアログのリソース・スクリプトみたいなのをプログラム内部に定義したいな〜とか思ってさ。

261 名前:デフォルトの名無しさん :2001/07/23(月) 12:25
>>260

だからって>>258のコードにする理由にはならないと思うけど。

262 名前:デフォルトの名無しさん :2001/07/23(月) 13:54
>>258
> 理由にはならない
ストレージを少しでも少なくしようと思っての事だけど。そうゆう意味じゃなくて?
結局以下のようなコードで解決。
解決したのは0xFFFF。マクロは説明の為のオマケね。

#define DLGCMD_TEXT 0
#define DLGCMD_EDIT 1
#define DLGCMD_CHECK 2
#define DLGCMD_END -1

#define Def_DlgText(x,y,w,h,id,p) \
  DLGCMD_TEXT,x,y,w,h,id,(short)((unsigned long)(p)&0xFFFF),HIWORD(p)
#define Def_DlgCheck(x,y,w,h,id,p) \
  DLGCMD_CHECK,x,y,w,h,id,(short)((unsigned long)(p)&0xFFFF),HIWORD(p)

static char szMsg[] = "String";
static unsigned short wDlgData[] = {
  Def_DlgText(10,10,96,20,IDC_TEXT,szMsg),
  Def_DlgCheck(10,30,96,20,IDC_CHECK,szMsg)
  };

263 名前:デフォルトの名無しさん :2001/07/23(月) 13:58
上の配列wDlgData、最後にDLGCMD_END入れるの忘れちゃった

264 名前:デフォルトの名無しさん :2001/07/23(月) 14:48
MFCで、ダイアログのOnPaintでオフスクリーン描画しようと思って、
void CHogeDlg::OnPaint()
{
PAINTSTRUCT ps;
CDC *dc = BeginPaint( &ps );
// dc使って描画
EndPaint( &ps );
}
ってやったんだけど、ちらついてしまいます。
dcで描画してる所をトレースしてみたら、EndPaint前なのに描画されてしまっていました。
ダイアログだとダメなんでしょうか?

265 名前:デフォルトの名無しさん :2001/07/23(月) 15:18
>>264
BeginPaint/EndPaint使ったからってオフスクリーン描画になるわけではない。
バックバッファを用意しろ。

266 名前:258 :2001/07/23(月) 16:00
>>262

ごめん、やっぱり言ってることもやってるコードも
意味不明だわ。

ただ、前述の奴バグは確認した。
スタックだと大丈夫だけど、それ以外に配置されると駄目みたいだね。


俺って厨だったんだな。鬱だ。

267 名前:149 :2001/07/23(月) 16:20
>>152 どうも。MSCommコントロールを貼り付けない方法(動的Create)で、
一応送受信はできたんですが、受信イベントをフックできないです。

>正攻法2:
>入力スレッドを立て、受信したらEventを立てる。
>メッセージポンプの当たりでイヴェントをチェック。

入力スレッドというのは、受信バッファを監視する用ということでしょうか。

268 名前:262 :2001/07/23(月) 16:28
>>259
これは、定義したshort配列をある関数に渡すと、内容に従って子ウィンドウをぽこぽこ作ってくれる為のデータ定義です。
子ウィンドウのタイプ・サイズなどはshortで定義出来ますが、キャプション文字列は配列に収まらないので、上位・下位ワードに分けてねじ込もうとしているのでした。

269 名前:名無しさん :2001/07/23(月) 16:30
ReadFileで無限ループしてバッファリングして
それでSetEvent。
でもふつうは勝手に受信させといて
APIで受信バッファをみれば良い。

270 名前:262 :2001/07/23(月) 16:31
あと、子ウィンドウの種類によっては必要なパラメータ数が異なるので、
構造体として定義する事が出来ないのでした。(出来ない事もないケド)

271 名前:デフォルトの名無しさん :2001/07/23(月) 16:57
>>270
なんでCreateDialogIndirectを使わないのか。

272 名前:デフォルトの名無しさん :2001/07/23(月) 17:15
特に派生元を意識しない独自クラスを新規作成して、メンバにコントロールを
入れるとします。この場合、コントロールへのメッセージを受け取りたい場合は、
基本クラスを設定せねば(genericじゃだめ)なりませんよね?多分。
皆さんこのような場合は基本クラスを何にするんでしょうか。
あと、基本クラスを追加(存在しない場合)する場合の手順は何かいい方法が
あるでしょうか。

273 名前:デフォルトの名無しさん :2001/07/23(月) 17:17
(゚Д゚)ハァ??

274 名前:259 (!=261) :2001/07/23(月) 17:17
>>268
>>271に同じ。
どの道、構造体を使うべきでは。

どうしてもって言うなら、shortで確保しないで、longで確保した方が万倍スマートです。
そんな部分のメモリケチっても、先にリソースが底尽きます。

275 名前:272 :2001/07/23(月) 17:18
すいません。genericでも基本クラスを設定できますね。
genericで、基本クラスを設定しなかったという状態でお願いします。

276 名前:デフォルトの名無しさん :2001/07/23(月) 17:23
>>272 = >>275
何がやりたいのか全く理解できない。
とりあえずサンプルコード晒せ。話はそれからだ。

277 名前:デフォルトの名無しさん :2001/07/23(月) 17:44
>257
そもそもクラスに関して何か勘違いしてないか。

278 名前:262 :2001/07/23(月) 19:18
> shortで確保しないで、long
そうしようと思った矢先に、解決策を思いついたのでした。
まぁ良いじゃん、16bit時代からやって来たから、貧乏癖が染み付いてるんだよ。

> CreateDialogIndirect
今はWindowsでやってるけど、将来的に他のプラットフォームへも持って行きたいんで、
なるべくAPI依存しないようにやってるんだよね。

279 名前:デフォルトの名無しさん :2001/07/23(月) 19:29
>>278
だったら、リソースをコンバートする方法を考えた方が建設的。

280 名前:278 :2001/07/23(月) 23:04
>>279
> リソースをコンバート
ふむ〜それはそうかも。
確かに、GUIをグラフィカルにデザイン出来ないってのは辛い物がある。
今は他にもやる事いっぱいで、脱線になっちゃうんでやんないけど、また同じような問題にぶつかったらやるかなぁ。
ありがと、良いアイデア出してくれて。

281 名前:デフォルトの名無しさん :2001/07/26(木) 08:39
test

282 名前:デフォルトの名無しさん :2001/07/26(木) 08:39
MSCOMM使ってます。純粋にポートが開かれてるかどうかを調べる方法は
ないのでしょうか?
GetPortOpenメンバ関数にしろ、GetCommIDメンバ関数にしろ、自分自身が
開いたポートに関しては分かるのですが、他のアプリによって開かれたポートに
関しては判定できません。
最悪CreateFile API関数を使おうかと思うのですが他に簡単な方法はない
でしょうか。

283 名前:282 :2001/07/26(木) 11:53
ポートオープンのアクションで例外拾えました。
やた!

284 名前:デフォルトの名無しさん :2001/07/26(木) 23:29
ちょっと意図とは違うのですが、
コンパイラされた後のファイルから
ソースを見ることって出来ますか?

参考にしたいプログラムがあったので・・・
危ない話すんません。。

285 名前:デフォルトの名無しさん :2001/07/26(木) 23:39
>>284
失せろマルチポスト野郎。

286 名前:デフォルトの名無しさん :2001/07/27(金) 17:51
ハンドルされていない例外は・・・・ってエラーは
try,catch
で受け取れない?

287 名前:286 :2001/07/27(金) 17:57
ゴメン。受け取れはする。
try(...)
の中で。
でも、やっぱその後に”ハンドルされていない・・・”って
メッセージが出て終了する。回避可能?

288 名前:デフォルトの名無しさん :2001/07/27(金) 19:11

現在3つの問題に頭を悩ましております。

1つ目はマウスの座標のことです。
GetCursorPos で取得できるのは整数単位の座標ですが
もっと精度の高い取得はできないのしょうか?
0.1ピクセル単位で取得したいのですが・・・

2つ目はプログラム終了時にOSが自動でプログラム内で
使用したオブジェクトを破棄してくれるみたいですが
自動破棄されないものってあるんですか?
メモリなんかは勝手に破棄してくれているように見えますが(システムモニターで見ていると破棄されているように見える)
メモリの破棄は任せちゃってもいいですか?
逆に「これはプログラム終了前に必ず破棄しないと逝けない!」ってものはありますか?

3つ目はモーニング娘の吉澤ひとみが好きで好きでたまりません。
現在の彼女は強いて言うなら矢口似です。
前は矢口ファンだったので彼女の評価は比較的良かったのですが最近は吉澤にメロメロなため彼女がウザくなってきました。
彼女と別れて吉澤(本人)と付き合う最も最適な方法はどのようなものでしょうか?
ぜひ教えてください。

289 名前:デフォルトの名無しさん :2001/07/27(金) 19:28
そもそもマウスカーソルは0.1ピクセル単位では動かない。っつーかネタ?

290 名前:RIP_MAPIRO :2001/07/27(金) 20:42
>>288
DirectInputを使って移動量を内部で累積したものを利用すれば可能。
マウスの挙動を自前で用意する事になるので、他のウインドウと共存
させるときは注意。

メモリの破棄は普通最後まで面倒見るべき。とくに他人様のオブジェクト
を構築するときは、内部でどんなリソースが確保されているか分からん。

291 名前:無能な姦理人@Shiri-Q :2001/07/28(土) 00:05
□□□□■□□□□□■□□□□□□□□□□□□□□□□□□□□□
□□□■■□□□□□■□□□□□□□■■■■■■■■■■■■□□
□□■■□□□□□■■■■■■□□□□□□□□□□□□□■■□□
□■■□□■□□□■□□□□■□□□□□□□□□□□□■■□□□
□□■□■■□□■■■□□■■□□□□□□□□□□□■■□□□□
□□□■■□□■■□■■■■□□□□□□□□□□□■■□□□□□
□□■■□□□□□□□■■□□□□□□□□□□□■■□□□□□□
□□■□□□■□□□■■■■□□□□□□□□□□■□□□□□□□
□■■■■■■□□■■□□■■□□□□□□□□□■□□□□□□□
□□□□■□□□■■□□□□■■□□□□□□□□■□□□□□□□
□□■□■□■□□□□■■□□□□□□□□□□□■□□□□□□□
□□■□■□■□□□□□■■□□□□□□□□□□■□□□□□□□
□■■□■□■□□□□□□□□□□□□□□□□□■□□□□□□□
□■□□■□□□□■■■□□□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□■■■□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□□□■■□□□□□□■■■■□□□□□□□





続きはコチラです
http://www.geocities.com/entry_k/main/main01.html

292 名前:デフォルトの名無しさん :2001/07/28(土) 00:32
>>290
そういうことなんか?
>>288が知りたかったのは「マウスの移動量」でいいんか?
「マウスカーソルの座標」と「マウスの移動量」は全然違うもんじゃないのか?

293 名前:デフォルトの名無しさん :2001/07/28(土) 15:05

288です。
ネタではありません。

1つ目はペイントソフトでA点からB点にマウスが移動した場合の軌跡をできるだけ正確に取りたいんです。
例えば (10,10) から (20,20) まで移動した場合のマウスの軌跡
(11.1,10.8)-(12.2,11.6)-(13.5,13.1)-(14.2,14.0) ... って具合に10分の1ぐらいの精度でマウスの微妙な動きを取得したいんです。

2つ目は自力で破棄するように心がけます。

3つ目に関しては忘れてください。
昨夜彼女とXXXして彼女の良さを再認識しました。ハァハァハァ
吉澤のことは忘れます・・・
っていうか昨日のFUNで「裸にエプロンの石川」に萌えてしまいました。
青春って素晴らしいですね。

294 名前:デフォルトの名無しさん :2001/07/28(土) 15:12
>>293
ん〜と…
その用途だと、充分に短い観測周期を取らないといけないと思うんだけど。
1ms単位で>>290の言ってたようにDirectInputで移動量を監視して積算。
当然誤差が出るから、最終的にはカーソル座標で丸めないといかんと思うが。

ちなみに、1ms周期を作るにはマルチメディアタイマー使うしかないかも。

295 名前:デフォルトの名無しさん :2001/07/28(土) 15:48
THICKが10msのOSで1msってどうやって測るのでせうか?

296 名前:デフォルトの名無しさん :2001/07/28(土) 16:48
QueryPerformanceConter

297 名前:デフォルトの名無しさん :2001/07/28(土) 16:51
>>294
それ以前にマウスは1ms単位では情報を送ってこないよ

298 名前:デフォルトの名無しさん :2001/07/28(土) 16:52
VC++ でインストールプログラムを作りたいのですが、
ショートカットファイルの作成方法(API)をご存知の方
教えてください。

299 名前:アッガイ :2001/07/28(土) 16:55
応援お願いしますっ!!
http://www.sh.rim.or.jp/~pumpkin/choice/

300 名前:デフォルトの名無しさん :2001/07/28(土) 16:56
>>293
検索すれば5分でみつかる

301 名前:300 :2001/07/28(土) 16:57
間違えた。
300は >>298 あてのメッセージ

302 名前:298 :2001/07/28(土) 17:04
すまん、見つかった

303 名前:デフォルトの名無しさん :2001/07/28(土) 21:59
VC6SP5+w2kの環境で質問があるのですが、リストビューに
アイテムを挿入すると、アイコンの背景が白くなってしまうのですが
何か回避方法は無いのでしょうか?

304 名前:286=287 :2001/07/30(月) 09:11
誰か返事くれよ。クスン。(涙

305 名前:ポカリスト :2001/07/30(月) 14:36
CxxxViewの中にSplitterWndってどうやればもてるの?
おしぇ〜て

306 名前:デフォルトの名無しさん :2001/07/30(月) 22:34
>>305
なぜフレームを使わない?

307 名前:デフォルトの名無しさん :2001/07/31(火) 09:39
っつーか、Scribbleからやり直せ。

308 名前:デフォルトの名無しさん :2001/07/31(火) 17:26
エクセルをオートメーションで操作しています。
エクセルの起動やセルの参照、書き込み、ファイルの保存等一通りできたんですけど、
マクロの実行ができません。
誰か分かる方います?

309 名前:デフォルトの名無しさん :2001/07/31(火) 17:29
>>308
ごめん。俺分かんないや。何みて勉強したの?おれも興味あるんで。

310 名前:デフォルトの名無しさん :2001/08/01(水) 12:54
ExecuteExel4Macroって違うかな?

311 名前:308 :2001/08/01(水) 12:57
>>309 VC++超初心者ってHPで質問掲示板があって、過去ログ(投稿)の
検索ができるんだけど、excelで検索してみ。

312 名前:308 :2001/08/01(水) 12:59
>>310 ナイスタイミング。今からやってみるよ。サンキュ。

313 名前:デフォルトの名無しさん :2001/08/01(水) 13:06
>311=312
なにをやっている。何をw

314 名前:308 :2001/08/01(水) 13:10
>>313 どういう意味だゴルァ!!!(悪意はないよ)

315 名前:デフォルトの名無しさん :2001/08/01(水) 14:11
VC6のエディタでキーワードの強調表示が出来るそうですが
オプションやカスタマイズに設定するところが見当たりあせん。
何処にあるんでしょうか?
あと、キーワードの定義ファイルって、どこかからかダウンロード
できますか?

316 名前:デフォルトの名無しさん :2001/08/01(水) 15:44
>ExecuteExel4Macroって違うかな?

違います。

Application.Run

で実行できます。

317 名前:308 :2001/08/01(水) 16:32
>>316 "Run"関数じゃダメだったよ。ほんで"_Run2"ってウサン臭い関数があって
これで逝けた。アンダーバーで何を表してんだよ。(w
"Run"と"_Run2"の仕様は全く一緒。関数内部を見てみると、DispatchID以外
全く一緒。うーん。もちょっと調べてみるわ。
ちなみに"ExecuteExel4Macro"は、まだVBAが出る前のExcel4.0のマクロとの
互換を保つための関数のようだな。この頃俺は多分123やってたんでよく分からん
のだが。とにかく旧命令をサポートしてるってことみたいだね。

まっ、とにかく逝けたのでよしとするわ。"Run"と"_Run2"の動作や用途の違い
が分かる人は教えてくれ。分かったら俺もアプするわ。

318 名前:デフォルトの名無しさん :2001/08/01(水) 18:27
>>315
ほりゃ。
http://www7.cds.ne.jp/~hayakawa/pt-06002.html

319 名前:デフォルトの名無しさん :2001/08/02(木) 15:38
"Afx"ってどういう意味でしょうか。なんかの略?

320 名前:デフォルトの名無しさん :2001/08/02(木) 16:06
>>319
あふろエックスだよ。覚えときなさい。

321 名前:デフォルトの名無しさん :2001/08/02(木) 16:35
>>320 嘘つくなって。アナルファックエクステンションって
拡張仕様のことみたいだね。検索してみ。いっぱいヒットするよ。

322 名前:デフォルトの名無しさん :2001/08/02(木) 17:00
>>321
一件もヒットしねぇぞグァラ・・・

323 名前:デフォルトの名無しさん :2001/08/02(木) 23:46
CSVを読み書きするとき特に気をつけることはありますか?
・文字列内にカンマがあるときは全体を"でくくる。
・さらに文字列内に"があるときは、"を""にする。

でいいでしょうか?

324 名前:デフォルトの名無しさん :2001/08/02(木) 23:49
>>323
CSVって、別に規格があるわけじゃないし。
323さんの扱うCSVがそうだったら、それでいいってしかいいようがない。

325 名前:323 :2001/08/03(金) 00:27
>>324
回答ありがとうございます。
できるだけ他のアプリケーションでも読み書きできる
ような形式にしたいんです。

かといって、いろいろなオプションをつけるのは
面倒なんで避けたいんです。

その場合、上記の方法が最善でしょうか?

326 名前:デフォルトの名無しさん :2001/08/03(金) 00:45
>>319 Afx = Application Frameworks

327 名前:デフォルトの名無しさん :2001/08/03(金) 01:16
XMLつかへ >>325

328 名前:びん :2001/08/03(金) 11:37
VCを使う = C++を使う = MFCを使え
ってことなんですか?

329 名前:一休み :2001/08/03(金) 14:22
>>326 xは?

330 名前:デフォルトの名無しさん :2001/08/03(金) 14:53
>>329
ks

331 名前:デフォルトの名無しさん :2001/08/03(金) 14:55
テンプレートクラスのインスタンスを

テンプレートクラス名1<テンプレートクラス名2<型名>> インスタンス名;

のように生成することは可能でしょうか?

332 名前:デフォルトの名無しさん :2001/08/03(金) 14:58
>>331
できるよ。

333 名前:331 :2001/08/03(金) 15:04
>>332
レスどうもです。
以下のように簡略化したソースでコンパイルを試みたのですが、
error C2146: 構文エラー : ',' が、識別子 'arrayPoint' の前に必要です。
のようなエラーが出てしまいます。

template<class T>
class Point
{
T m_x, m_y;
};

template<class T>
class Array
{
T m_array[10];
};

void main()
{
Point<float> point;
Array<float> array;
Array<Point<float>> arrayPoint; // この行でエラーが出てしまう
}

334 名前:331 :2001/08/03(金) 15:05
コンパイラはVisualC++6.0 Pro + SP5 です。

335 名前:デフォルトの名無しさん :2001/08/03(金) 15:06
>>333
>Array<Point<float>*> arrayPoint; // この行でエラーが出てしまう

↑*のとことに、スペース入れてください。
そうしないとコンパイラが演算子の>>と区別がつかないらしいです。

336 名前:331 :2001/08/03(金) 15:08
>>335
レスどうもです。
なるほど、右シフトと認識されてしまうのですね。
ありがとうございました!

337 名前:デフォルトの名無しさん :2001/08/03(金) 19:34
マルチスレッドプログラムについて質問があります。

スレッドを使った場合共有リソースアクセス時に同期を取らなければなりませんが
実際どのような現象が発生するのでしょうか?

仮にWin98で共通の変数 INT nHoge; を別のスレッドから使用する場合

nHoge = 10;
のような処理を別のスレッドから実行した場合

WinNT系 + 2CPUの環境だと、完全に同時にこのような処理が行われると思うのですが
実際こういう状況になった場合、値が壊れるのでしょうか?
それとも同時アクセスによってシステムクラッシュしてしまうのでしょうか?

また
nHoge = 10;と言う処理と return nHoge; や if(nHoge)等の同時実行
(つまり書き込み中に別のスレッドから読み込む)
したばあい、読み込みの値が壊れるだけですむのでしょうか?
それとも同時実行でシステムクラッシュするのでしょうか?

上記のような処理で仮にシステムクラッシュするとしてもう一つ質問があります。
1CPUやWin98等の環境の場合上記のような事をしても、時分割で実行されるため
完全な同時アクセスにはならないと推測します。
つまりアセンブラで1命令程度の処理ならば、値が予定外になるぐらいですむと推測するのですが、
実際はどのような現象が現れるのでしょうか?

その他同期関係で注意する事があれば合わせてご教授していただけると大変助かります。
よろしくお願いします。

338 名前:337 :2001/08/03(金) 19:36
すいません。

上記の 6行目
>仮にWin98で共通の変数 INT nHoge; を別のスレッドから使用する場合

は書き込みミスです。無視してください。

339 名前:デフォルトの名無しさん :2001/08/03(金) 19:49
・同時書き込みでデータの消失
・双方待ち状態になりデッドロック、プログラムハング
値が壊れるだけで済む、って言ってるがおもっきり重大な問題だと思うが
シングルCPUに関してはその通り

340 名前:デフォルトの名無しさん :2001/08/04(土) 05:36
>>337
変数の同時アクセスでシステムクラッシュはしないよ。
どれかのスレッドが直前に書きこんだ値を読むだけ。

341 名前:デフォルトの名無しさん :2001/08/04(土) 09:16
>>340
デュアルだとバス衝突したりしないの?

342 名前:デフォルトの名無しさん :2001/08/04(土) 11:42
age

343 名前:デフォルトの名無しさん :2001/08/04(土) 12:02
>>341

そいつはもう、マルチスレッドのソフトウェアが
どうとかいうレイヤじゃないだろう。

344 名前:デフォルトの名無しさん :2001/08/04(土) 12:23
>>341
バスアービトレーションというキーワードでアーキテクチャ
の本でも探して勉強しなおせ。

345 名前:デフォルトの名無しさん :2001/08/04(土) 19:54
>>341
ファイルだったらそうだが、メモリの読み書きじゃ論理エラーで終る。

346 名前:sage :2001/08/05(日) 14:35
VC++のデバッガーって配列をポインタとして扱った場合に最初の要素しか見えないんだけど、なんとかならんの?

347 名前:デフォルトの名無しさん :2001/08/05(日) 14:37
>>346
ならん

348 名前:神に喧嘩を売る男 :2001/08/05(日) 14:45
ウィルスで俺の携帯壊してくれ〜(こおせないよね(笑))

349 名前:346 :2001/08/05(日) 14:59
>>347
簡潔なレスどうも。では、なんとかなる良いデバッガはない?

350 名前:デフォルトの名無しさん :2001/08/05(日) 15:22
http://homepage2.nifty.com/katuya/index.html

351 名前:デフォルトの名無しさん :2001/08/05(日) 16:08
>>348
「こおせ」ません(ワラワラ

352 名前:デフォルトの名無しさん :2001/08/06(月) 09:55
スピンボタンって、ボタンアップのメッセージってないよね。
皆どうしてる。
例えば、スピンボタンと連動させるエディットボックスの数値は動かしたい
んだけど、メイン処理はボタンアップでって場合。

353 名前:デフォルトの名無しさん :2001/08/06(月) 12:19
>>352
WM_NOTIFY

354 名前:352 :2001/08/06(月) 13:57
>>353 もちっと詳しく。

355 名前:デフォルトの名無しさん :2001/08/06(月) 15:32
>>354
PreTransrateMessage で自分でメッセージ調べれば?

356 名前:デフォルトの名無しさん :2001/08/06(月) 16:08
>>352-355
SPY++という便利なものがあるだろうに。

357 名前:デフォルトの名無しさん :2001/08/07(火) 06:33
>>354
ていうかMSDNで「スピンボタン」て引いてみろ

358 名前:デフォルトの名無しさん :2001/08/07(火) 20:17

スタティックライブラリでのリソースの扱い方について教えてください。
スタティックライブラリ内にリソースファイルを作りました。
スタティックライブラリからリソース内のダイアログを生成しようとすると失敗します。
アプリケーション本体のリソース内のダイアログはスタティックライブラリ内から生成できます。
どうもリンクの時点でスタティックライブラリ内のリソースが正常にリンクされていないようですが
これってどうすればいいですか?
リンクの際に何か特殊なオプションを設定するのでしょうか?
環境はVC++6.0でSDKでプログラムしています。
教えてください。

359 名前:デフォルトの名無しさん :2001/08/08(水) 10:42
>>358
確か MS-Linker には、複数のコンパイル済みリソースを「リンク」する能力は
無かったと思います。

ライブラリが必要とするリソースを *.rc で提供して、
アプリケーションの *.rc からインクルードしてもらう必要があります。

たとえば MFC をスタティックリンクするアプリケーションを
ウィザードで作成しても、やはりそうなっていると思います。

360 名前::2001/08/08(水) 22:39
質問なのですが、みなさんはMFCつかってますか?
MFCつかえるようになったら、全部MFCでつくってますか?

361 名前:デフォルトの名無しさん :2001/08/08(水) 23:44
使ってるよ
SDKに疲れたらMFCに手を出せばいい思う
全部MFCで作るっていうのは無謀
APIの全機能がつかえるわけではないし
CFindFileのような,ぁやιぃ(使えない)クラスがごろごろあるからね

362 名前:デフォルトの名無しさん :2001/08/09(木) 00:57
>>360
今、SDKだけですか。そりゃ凄いや。
MFC主体だけど361さんが書いているように全部MFCというのは
無理があると思う。APIを直接呼び出していることも多い。

363 名前::2001/08/09(木) 07:53
??
MFCとAPI直が
まざってるということですか?
明確に、このアプリは全部MFC!とかわける必要はなし?

364 名前:デフォルトの名無しさん :2001/08/09(木) 08:11
>>363
MFCだって内部で結局APIを呼んでいる。
MFCにはいくつか致命的に使えないクラスがあって、
それを使うくらいならAPI直叩きの方がマシというだけのこと。

結局、MFCの大部分はWinAPIのラッパーでしかないので。

365 名前:デフォルトの名無しさん :2001/08/09(木) 15:57
"GetFirstViewPosition"は常に最初に作った VIEW が帰って来るのでしょうか。

366 名前: :2001/08/09(木) 16:07
>>365

こういう質問は自分で確認できると思うのだが?

367 名前:デフォルトの名無しさん :2001/08/09(木) 17:14
>>366
全く持って同意。
使ってみて、動きが変だとか、思い通りに動かないとかならまだわかるが、
俺らはMSDNじゃねぇっつーの。

368 名前:デフォルトの名無しさん :2001/08/09(木) 17:36
>>367
> 俺らはMSDNじゃねぇっつーの。
ワラタ!

369 名前:デフォルトの名無しさん :2001/08/09(木) 20:22
もう出てたらごめん。
Visual Studio とかの分割ウィンドウってどうやってるの?
ただの CSplitterWnd とは違うよね。
同じようにやろうと思ったら大変なのかな?

370 名前:デフォルトの名無しさん :2001/08/09(木) 20:31
>>369
これとかどう?
http://nt.sakura.ne.jp/~miwaki/progtips/window/dockingwindow.shtml

371 名前:369 :2001/08/09(木) 21:10
>>370
うぉー ありがとう!
けっこう大変そうですが調べてみます。
「MFCインターナル」買ってみようっと。

372 名前:デフォルトの名無しさん :2001/08/10(金) 02:50
age

373 名前:MSDN :2001/08/10(金) 04:59
>>365
CDocument::GetFirstViewPosition
virtual POSITION GetFirstViewPosition( ) const;

戻り値

GetNextView メンバ関数での列挙に使う POSITION 値を返します。

解説

ドキュメントに関連付けられたビューのリスト内の最初のビューの位置を取得します。



//ビューのリストの最初のビューを取得します。

POSITION pos = GetFirstViewPosition();
CView* pFirstView = GetNextView( pos );
// この例では CDocument::GetFirstViewPosition
// と GetNextView を使って各ビューを再描画します。
void CMyDoc::OnRepaintAllViews()
{
 POSITION pos = GetFirstViewPosition();
 while (pos != NULL)
 {
  CView* pView = GetNextView(pos);
  pView->UpdateWindow();
 }
}

// 同じ結果を得る簡単な方法は、UpdateAllViews(NULL) を
// 呼び出すことです。

374 名前:365 :2001/08/10(金) 08:53
いや。そんなに寄ってたかって言われても・・・。
まぁ。精進しますです。はい。

375 名前:デフォルトの名無しさん :2001/08/10(金) 10:30
ON_COMMAND_RANGEをクラスウィザードで追加できないのですが
バグでしょうか?

376 名前:デフォルトの名無しさん :2001/08/10(金) 10:40
GetNextViewって登録した順番にViewが返ってくるの?

377 名前:デフォルトの名無しさん :2001/08/10(金) 19:50
>>376
VC持ってますか?
持ってれば実験すればいい。
持ってないならどうだっていい。

378 名前:デフォルトの名無しさん :2001/08/14(火) 11:57
age

379 名前:デフォルトの名無しさん :2001/08/16(木) 11:26
VC++で、
関連づけされたファイルを起動する(という言い方も変だけど)事はできるのでしょうか

たとえばxxx.lzhをダブルクリックすると、関連づけされた解凍ソフトが立ち上がって
勝手に解凍までしてくれる状態になっている時、

プログラム中から、同じような事をしたいのです
(解凍ソフトのほうを呼び出すのではなく、あくまで xxx.lzhファイルを実行する
というふうにしたいのです・・・)

380 名前:デフォルトの名無しさん :2001/08/16(木) 11:30
>>379
コマンド発行で"start xxx.lzh"ってするってはどう?

381 名前:デフォルトの名無しさん :2001/08/16(木) 11:30
>379
377が参考になるぞ。

382 名前:381 :2001/08/16(木) 11:37
>379
おれの勘違いだった。
普通にopenではだめだな。
陳謝。

383 名前:デフォルトの名無しさん :2001/08/16(木) 11:39
>>379
ShellExecute

384 名前:デフォルトの名無しさん :2001/08/16(木) 11:42
>>379
レジストリ読んでコマンド実行
だめ?

385 名前:379 :2001/08/16(木) 14:59
ありがとうございました
勉強不足で、CreateProcessしか 知らなかったのです・・・
ShellExecuteで解決ですね!

386 名前:NOMAD :2001/08/18(土) 01:46
VC6スタンダード使っています。
ツリービューを使って(別の方法があるならそれでもいい)エクスプローラーの左側のようなのをつけたいのですが
どうすればよいのでしょう?
Webなどで調べてみるとダイアログを立ち上げる方法はけっこう載ってるのに表示させておくというのは
見つけられなかったんです。
ディレクトリ構造を毎回調べていくという方法なら一応今の知識でもできるのですが、
もっといい(楽な)方法があれば教えて欲しいのです。
ヒントや参考図書でもうれしいです。よろしくお願いしますm(_ _)m

387 名前:デフォルトの名無しさん :2001/08/18(土) 03:56
指定されたファイルをエクスプローラで(というかフォルダで)開いて
選択された状態にする方法はないでしょうか?

ちょうどショートカットのプロパティで「リンク先を探す」ボタンを
押したときの処理みたいに。

お願いします。

388 名前:デフォルトの名無しさん :2001/08/18(土) 04:03
>>386
とりあえずどうぞ
http://www.codeproject.com/shell/seashell.asp

389 名前:デフォルトの名無しさん :2001/08/18(土) 08:52
>>387
ShellFolderView オブジェクトを作ってあれこれ。

390 名前:NOMAD :2001/08/18(土) 12:53
>>388
情報どうもです。ソース見て研究してみます。
しかし・・・これの実装は大変そうですね(^^;

391 名前:デフォルトの名無しさん :2001/08/18(土) 16:58
リソースえでぉたで作ったダイアログのスピンの最大値変える方法どうやってやんのよ

392 名前:デフォルトの名無しさん :2001/08/18(土) 17:44
>>391
ClassWizardでエディットコントロールに値として変数を割り当てると最大値と最小値が設定できる。

393 名前:デフォルトの名無しさん :2001/08/19(日) 02:43
前から疑問だったんですが
みなさんは窓作るだけのプログラムを
何も見ないで一から書けますか?
やはり職業プログラマの人は
それくらい当然のごとく覚えてるんでしょうか?

394 名前:デフォルトの名無しさん :2001/08/19(日) 02:52
書けません
それが出来るのはゲームプログラマと秀まる夫くらいです

395 名前:デフォルトの名無しさん :2001/08/19(日) 03:04
>>393
わたしも無理です
Hello Worldだけでも意味がわからないソースがあるっス(w

396 名前:デフォルトの名無しさん :2001/08/19(日) 05:25
>>393
できるよ。
新しいプロジェクトを作るときに「標準的なHelloWorld」選べば一発(w
VC6限定だけどね。

397 名前:デフォルトの名無しさん :2001/08/19(日) 05:47
>>396
だね。

そもそも、書き溜めたソースと参考資料の検索速度で「仕事」してるようなもんだし。
趣味のプログラムの方がよっぽど手間かかる(笑

398 名前:デフォルトの名無しさん :2001/08/19(日) 09:03
>>393
396、397の言うとおり
先代のコードをいかに利用するかってのもスキルの一つ。

399 名前:デフォルトの名無しさん :2001/08/19(日) 15:14
あげ?

400 名前:デフォルトの名無しさん :2001/08/19(日) 17:43
400おぱーい

401 名前:  :2001/08/20(月) 01:32
リストビューコントロールとヘッダーコントロールの違いが
いまいちわからないのですが、どう違うんでしょう?

402 名前:デフォルトの名無しさん :2001/08/20(月) 01:45
>>401
ハァ?

403 名前:デフォルトの名無しさん :2001/08/20(月) 08:10
Listってのは表。
HeaderControlってのは、Listの見出し。
ListViewは、Listの頭にHeaderControlがくっついてるもの。

404 名前:デフォルトの名無しさん :2001/08/20(月) 11:41
>393
覚えてるよ。VC++6.0のウイザード使わないで何回も最初から書いてたから。今思うとただの馬鹿

405 名前:デフォルトの名無しさん :2001/08/20(月) 12:43
class StrngVectorList : public string,public vector,public list
{

}

406 名前:デフォルトの名無しさん :2001/08/20(月) 23:27
>>393
それって普通じゃないの?
MFCって使ってるひといるの?

407 名前:デフォルトの名無しさん :2001/08/20(月) 23:29
>>406
むしろ使ってないの?
自分(会社)専用ライブラリとかないとき

408 名前:デフォルトの名無しさん :2001/08/20(月) 23:50
APIだけで書いてるよ、ついでにIDEも使って無い。
だけど別に作るの遅くないよ?

409 名前:デフォルトの名無しさん :2001/08/21(火) 01:26
>>408
おぉ、同志よ!
WIN32 API の上に何重にも積み重ねられた
得体の知れないウンコの塊を使うよりも、
最小限の機能を極小サイズで書きたいよ。

小物を作るときは、msvcrt なんかも使わない。

410 名前:デフォルトの名無しさん :2001/08/21(火) 01:34
>>409
そもそも、Win32 API 自体がコテコテにデコレーションされてるじゃな
い。MSVCRT.DLL 使わずとも KERN32.DLL, USER32.DLL, GDI32.DLL
使ってる時点で、どうせ大差ないよ。

411 名前:デフォルトの名無しさん :2001/08/21(火) 01:36
>>408
それだとウィンドウプロシージャが 4000 行ぐらいになったり、
IDisplatch 派生クラスの実装にえらく手間取ったりしない?

412 名前:デフォルトの名無しさん :2001/08/21(火) 01:37
>>409
おれは、サイズなんかより、見やすさ(理解速度)優先。

413 名前:デフォルトの名無しさん :2001/08/21(火) 04:36
>>408
俺、MFC使ってアンタの半分の期間で同じ作業できるよ。

414 名前:デフォルトの名無しさん :2001/08/21(火) 08:12
>>406
API直叩きで書くってのと「何も見ないで」書くってのにはかなり大きな隔たりが…。
俺CreateWindowの引数なんてMSDN見ないと書けないぞ。

415 名前:デフォルトの名無しさん :2001/08/21(火) 10:07
>>414
俺は見ながらでも間違える自信あるね。
つか、あんな量の引数要求されてもなぁ・・・

416 名前:409 :2001/08/21(火) 12:58
>>410
そうは思わんけどなぁ...。

>>412
勿論、時と場合にもよるな。
漏れだって年がら年中「サイズ命」ってわけじゃない。

417 名前:デフォルトの名無しさん :2001/08/22(水) 10:54
STLなんだけど。
あるコンテナを関数の引数として渡したいんだけど、関数はテンプレート関数
にしなきゃだめなのでしょうか?

418 名前:デフォルトの名無しさん :2001/08/22(水) 16:04
今C++勉強してる者ですが、最近C#なるものが出てきましたよね。
これってC++今からやるよりはC#の方がいいのでしょうか?
いまいちC#ってのがわからないのですが、C#はC++の上位版
なのですか?CとC++の関係のように。今後C++に取って代わる
のでしょうか。

419 名前:名無しさん :2001/08/22(水) 16:08
それは誰にもわからない

420 名前:デフォルトの名無しさん :2001/08/22(水) 16:24
>>418
C#はむしろVBの代わり。

421 名前:デフォルトの名無しさん :2001/08/22(水) 16:36
まったくそのとおり。C++に載り切れなかったVB厨が使うもの。

422 名前:デフォルトの名無しさん :2001/08/22(水) 18:20
てっきりJavaに走ったのをネイティブコードちらつかせて
引き戻しているのかと思ったよ。

423 名前:シド :2001/08/22(水) 19:56
OpenGL・VC++に関して
参考になる書籍を教えてください。
いろいろ探したんだけどいいのがなくて。
お願いします。

424 名前:デフォルトの名無しさん :2001/08/22(水) 20:08
Windowsプログラミング

425 名前:シド :2001/08/22(水) 23:10
OpenGL・VC++に関して
参考になる書籍を教えてください。
いろいろ探したんだけどいいのがなくて。
お願いします。

426 名前:シド :2001/08/22(水) 23:11
OpenGL・VC++に関して
参考になる書籍を教えてください。
いろいろ探したんだけどいいのがなくて。
お願いします。

427 名前:名無しさん :2001/08/22(水) 23:17
アマゾンでさがせば
いっぱいでてくんじゃない?

428 名前:デフォルトの名無しさん :2001/08/22(水) 23:20
いまさらOPENGLですか?

429 名前:デフォルトの名無しさん :2001/08/23(木) 00:01
たしかにいまさらなんだけど、
今一番OpenGLしやすい環境ってWindowsかもね。

430 名前:デフォルトの名無しさん :2001/08/23(木) 01:36
あのVC++の6を使って勉強しようと思いインストールしましたが
もう、これかなり古いですか?
勉強用にはどんなものなのでしょうか?
マジレスたのみます。

431 名前:デフォルトの名無しさん :2001/08/23(木) 01:38
>>430
少しは頭使いなよ。MS の Web サイトに行けば、その程度の情報はす
ぐ入手できるでしょ?

432 名前:デフォルトの名無しさん :2001/08/23(木) 02:16
430ですが、まだ初心者で
VC++みてるだけで頭がくらくらして
熱がでて寝込みそうなくらいなんです。
MSのWEBサイトもみただけでぶったおれそう。

433 名前:デフォルトの名無しさん :2001/08/23(木) 02:19
とにかくVC6のサービスパック落として来い

434 名前:デフォルトの名無しさん :2001/08/23(木) 02:21
>>432
まぁ、初心者ならわかるが・・・

別に古くはないよ。(一応売ってる中では最新版だから)
ただ、そろそろ新しいのが出る。

435 名前:デフォルトの名無しさん :2001/08/23(木) 03:37
ダイアログボックスでエジットボックスに初期の文字列を設定します。
それをプロシージャの中でやるとうまくいくんですが、
ごちゃごちゃしてきたので新しい関数にまとめて呼ぶようにしたら
文字列が設定されなくなりました。
なんででしょうか?

436 名前:デフォルトの名無しさん :2001/08/23(木) 03:40
>>435
状況が良く分かりません。具体的にウィンドウプロシージャでどのメッ
セージを受け取ったときに、どういう処理をしているのか書いて下さい。

437 名前:デフォルトの名無しさん :2001/08/23(木) 04:06
430です。
甘えてしまいました。すみません。
なんとなく今のバージョンでも
よさそうな感じですね。
失礼しました。

438 名前:435 :2001/08/23(木) 06:26
部分的に抜き出すと、
case WM_INITDIALOG:
initdialog();
return 0;
...
void initdialog(){
SetDlgItemText(hWnd, IDC_EDIT1,"123");
return;
}
こんな感じです。
これだとエジットボックスに文字列が表示されないのですけど、
SetDlgItemTextをプロシージャの方にコピペするとうまくいきます。

439 名前:デフォルトの名無しさん :2001/08/23(木) 07:16
hWndはグローバル変数か?

440 名前:  :2001/08/23(木) 07:32
そういやVSの次バージョンっていつ頃発売なんだろ・・・。
もうかなり長いこと6.0のような気が。

441 名前:435 :2001/08/23(木) 07:50
>>439
Yes.

442 名前:デフォルトの名無しさん :2001/08/23(木) 07:51
昨日だよ。早く買いに行こうね。

443 名前:デフォルトの名無しさん :2001/08/23(木) 07:57
>435
それだと別に関数にしなくてもいいだろ。むしろしたほうが汚い。応用性無いクソ関数だし。

444 名前:デフォルトの名無しさん :2001/08/23(木) 10:01
MFCを使っていると、F1が勝手にヘルプ起動になってしまいますが、
これを避けて、自前の処理を呼び出す事は出来るのでしょうか?
ダイヤログベースの窓で作っているのですが、
そもそもファンクションは、今の私では、
PreTranslateMessageの、WM_KEYDOWNメッセージでしか取れません。(T_T)
F1に至っては、ヘルプを探す窓が表示されるだけで、
PreTranslateMessageにも何も来ない感じです。
MFCさえ使わなければ・・・という感じなのですが、
非MFC化する時間が無いこともあって焦ってます(^^;

445 名前:デフォルトの名無しさん :2001/08/23(木) 10:13
マイクロソフト・フライドチキンはビルゲイツ独自の製法にのっとって丁寧に作った美味しいフライドチキンです。

446 名前:デフォルトの名無しさん :2001/08/23(木) 10:43
VisualC++ 6.0がインストールできません。
どうすればいいでしょう?

447 名前:デフォルトの名無しさん :2001/08/23(木) 10:49
>>446
あきらめなさい。

448 名前:デフォルトの名無しさん :2001/08/23(木) 10:51
VC++は2枚目のCDに大半のデータが入っています。ですので割れで1枚目のCDだけ手に入れてもインストールできません。残念でしたお馬鹿さん。

449 名前:デフォルトの名無しさん :2001/08/23(木) 11:40
IRQ割り込みをVCアプリから使うことは出来るのでしょうか?

450 名前:デフォルトの名無しさん :2001/08/23(木) 14:50
WinInetのFTPを非同期で使うプログラムを作成してるんですが。
FtpGetFile要求後の中断がうまくできません。
FtpハンドルをInternetCloseハンドルで削除すると
WinInet内部で落ちてしまいます。
なにか情報などを知っている方いませんか。

451 名前:デフォルトの名無しさん :2001/08/23(木) 16:30
>>450
WinSock使え

452 名前:デフォルトの名無しさん :2001/08/23(木) 17:10
>>451
やっぱそれしかないですかねー。
WinInetのFtpは特に不安定でイヤになりますよほんと・・・・。

453 名前:デフォルトの名無しさん :2001/08/23(木) 19:26
受け取った2つのLIBファイルをEXEに組み込んでビルドしたら
「〜は他で使用されてます」みたいな競合(?)エラーが沢山出たん
ですけど。。。
これはLIBの作成者が悪い?それとも私が回避できる問題なのでしょうか?

454 名前:デフォルトの名無しさん :2001/08/23(木) 19:35
無視してかまへん

455 名前:デフォルトの名無しさん :2001/08/23(木) 19:37
>>444
Acceleraterリソース見たか?

456 名前:デフォルトの名無しさん :2001/08/23(木) 23:33
VC6使ってますけど、コンパイル時に、他のdll(mfcのdllじゃないやつ)を.exeの内部に組み込んでしまって、.exeだけにしたいのですが、例えばdllの名前がtest.dllだとしたら、どういう風にコンパイルすればいいんでしょうか。よろしくお願いします。

457 名前:デフォルトの名無しさん :2001/08/24(金) 00:19
あの、DLLの意味分かってる?

458 名前:デフォルトの名無しさん :2001/08/24(金) 00:52
>>456
たしかに全部1ファイルにして、DynamicにLoadしたい場合がある。
納品物件とか、一応モジュール化したけど、リリースで使うのが
決まってる様なやつなど。静的にリコンパイルなんてしたくないしね。
そのまま実行できるアーカイバってのがあったと思う。
(伸長したDLLを読みに行ってくれるかは疑問だけど)

459 名前:デフォルトの名無しさん :2001/08/24(金) 01:17
なんかdllをlibにするツールなかったっけ?

460 名前:sage :2001/08/24(金) 01:21
>>459
dllのインポートライブラリを作るツールじゃないの?それ

461 名前:459 :2001/08/24(金) 01:32
>>460
スマソ、そうみたい。DirectX関係のやつね。

462 名前:デフォルトの名無しさん :2001/08/24(金) 01:35
原理的には可能なのかな?
詳しい人いない?

463 名前:PeFileWrapper :2001/08/24(金) 02:00
>>462
条件が揃えば不可能ではないと思う。
条件と言うのは、元の .exe と .dll を選ぶということ。
ただしその条件を満せる可能性は、
両者をあらかじめ故意にそのように作りでもしない限り、
ほとんどゼロといえる。


たとえば、両者がともにダイアログリソースを持っていたとする。
リソースには文字列(名前)か序数のどちらかを割り付ける。

もし .exe と .dll でおなじ名前か序数のダイアログリソースが
ひとつでもあったら、
両者を互いに干渉することなくくっつけて
ひとつのバイナリにすることは不可能。
ダイアログに限らず、他のタイプのリソースでも同様。

…これはあくまでひとつの例だけどね。

464 名前:デフォルトの名無しさん :2001/08/24(金) 02:29
リソースに突っ込んで実行時に書き出しLoadLibrary

465 名前:デフォルトの名無しさん :2001/08/24(金) 04:13
>>464
それだとみかけ上ひとつのDLLにみえないこともないけど、
結局リソース内のデータを複数のDLLとしてその場でファイル生成して、
そのDLLごとにLoadLibraryってことですよね?

結局リソースのセクションとしてロードされているわけだから、
そのままセクションの属性を変えて、フィックスアップして
一発でやりたいですね。セクションの属性を変えるのは
簡単そうだけど、コードとデータのセクションのフィックスアップは
めんどうだなあ。なんかスマートな方法ってないもんでしょうか。

466 名前:463 :2001/08/24(金) 09:42
>>465
Fixup はかなり面倒だけど、難しいわけじゃないから頑張ればできる。


Fixup の手を抜くなら、ベースアドレスを指定して、
.reloc セクションをぶった切ればいい。(あらかじめ Fixup しておく)


ただし TLS が使えないことは自明。
あと、モジュールハンドルをもたないから、
それを直接・間接に要求する API は全滅。
あと、スレッドの Attach と Detach で
DLL の初期化ルーチンを呼ぶことができない…とか。

Fixup の処理と同様にして IAT を埋める必要があるから、
そのときにハックしてシミュレートすれば、
モジュールハンドルを要求する API はなんとかなるけど、
かなり大変なコードになると思う。


で、普通ならこのあたり(API のシミュレート関連)を DLL に
しておきたいと思うところだが、それをやってしまうと、
この場合、意味がなくなっちゃう。 (藁


いろいろ制限が厳しいけど、
不可能というわけではない。

ただし、そこまで時間とお金をかけてまでして、
ひとつのバイナリにすべてを押し込む価値(意味、必要)があるのかどうか、
最後はこいつを天秤にかけることになるだろうな。

漏れは、意味がないと思うけどな。
どのみち、DLL のバージョンの違いで動かない…なんてことは、
Windoze を使う以上、不可避だからね。

467 名前:デフォルトの名無しさん :2001/08/24(金) 13:57
>465
そんなにセクションとフィックスアップを多様されるとセックスアップと読んでしまうじゃないか。

468 名前:デフォルトの名無しさん :2001/08/25(土) 01:42
COMについて教えてください。

pObj->QueryInterface(IID_IDataObject, (PPVOID)&pIDataT);
このようなコードがよくありますが、

IID_IDataObject を取得しようとした場合 pObj-> が必要になりますが
この pObj の部分はどのように調べたら良いのでしょうか?
CoCreateInstance(CLSID_***
っていうので取得するようですが、この CLSID_*** の部分に何を指定するか
どう調べたらいいんですか?

「IID_IDataObject を取得するには CoCreateInstance で CLSID_*** を指定して、それから QueryInterface しろ」
ってどこかに書かれているのしょうか?

現在やりたいのはドラッグ&ドロップでのファイル名の交換です。
VCのサンプルを見て勉強中なんですがCOMで挫折しています。
全然分からないのは DoDragDrop の引数の IID_IDataObject にデータを格納するようですが(多分)
どうやって格納するんですか?
どこかのサイトに分かりやすいサンプルがあるようでしたら教えてください。

469 名前:デフォルトの名無しさん :2001/08/25(土) 08:19
データを渡す側は、

class FileNameData : public IDataObject
{
  // GetData とか QueryGetData, EnumFormatEtc
  // GetDataHere, GetCanonicalFormatEtc, SetData, DAdvise,
  // DUnadvise, EnumDAdvise, QueryInterface, AddRef, Release
  // を(ちゃんと渡したいファイル名を返すように)自分で実装。
}

こんなのを作って new FileNameData かなんかでオブジェクトを作る。

470 名前:デフォルトの名無しさん :2001/08/26 08:26
CListViewで質問です。

class CMyListView : public CListView
{
protected:
  CMyListView();
  DECLARE_DYNCREATE(CMyListView)

public:
  CListCtrl &m_List;
...
};

みたいにして、OnInitialUpdate()辺りで、
m_List = GetListCtrl();
というようにしたいのですが、コンストラクタで何とかしろゴルァーみたいなエラーが出てしまいます。
うまく回避して実現する方法がありましたら教えてください。よろしくお願いします。

471 名前:デフォルトの名無しさん :01/08/26 09:01
>>470
メンバにしなくてもローカル変数にそのつど受ければいいんじゃ…。
どうしてもメンバにしたけりゃ

public:
  CListCtrl* m_pList;

としといて
m_pList = &GetListCtrl();
と取る。

472 名前:デフォルトの名無しさん :01/08/27 09:49 ID:s7D152vQ
ワーカースレッドを AfxBeginThread にて作っております。
このとき、構造体を渡したいのですが、void受けなので、メンバデータ
が飛んでしまいます。どうしよ。

473 名前:デフォルトの名無しさん :01/08/27 11:24 ID:5m6UTQbg
>>472
受け取ったらキャストしろ

474 名前:472 :01/08/27 11:35 ID:s7D152vQ
void受けは関係なかった。スマソ。
キャストしてもうまくいかん。
通常の関数受け渡しではキャストすればうまく逝くんだが、スレッド関数では
だめなんだ。
ちなみに構造体のアドレスはきちんと渡せてる。でもメンバがグチャグチャ。

475 名前:472 :01/08/27 11:51 ID:s7D152vQ
呼び出し元で構造体をポインタ宣言して、メモリ確保してポインタを渡してやれば
うまくゆく。

呼び出し元で構造体を宣言して、ポインタ(&)を渡してやればうまく逝かない。
どうして???

476 名前:デフォルトの名無しさん :01/08/27 12:00 ID:U/MfduGw
>>472
>呼び出し元で構造体を宣言して、ポインタ(&)を渡してやればうまく逝かない。
>どうして???
スコープ外だから。

477 名前:472 :01/08/27 12:03 ID:s7D152vQ
>>476
別スレッドだから、スコープ外になるってことか?
サンクス。

478 名前:デフォルトの名無しさん :01/08/27 13:42 ID:QY1C3w3s
>>477
違う。
そのスレッドが動作中に、ローカルで宣言したスタック領域が解放されるから。

スタック領域にメモリ確保

スレッド生成、確保したポインタ渡す

return(スタック領域解放)

この時点で、別スレッドで処理しているメモリが解放される。
デバッガでブレークしかけて追ってみそ。

479 名前:デフォルトの名無しさん :01/08/27 14:30 ID:.CyrU1AM
>>477
開放されるというか、ローカル変数用の領域(スタック)は使いまわし
されるから、非同期で動いてる別のスレッドに渡しちゃいけない

mallocしたくない場合は同期オブジェクト使って、作ったスレッド
が自分のローカル領域にコピーするまで待つようにすれば大丈夫

480 名前:472 :01/08/27 14:42 ID:s7D152vQ
>>478

おおっ!なるほど!
ということは、スタティックな領域に置くか、スレッドを呼び出す関数を記述
しているメンバ関数を持つクラスのメンバにするなどとせねばならないですね。
ホントにありがとっ!

481 名前:472 :01/08/27 14:45 ID:s7D152vQ
>>479

おおっ!そういうやり方もありますか。勉強してみます。サンクス!

482 名前:デフォルトの名無しさん :01/08/27 15:58 ID:s7D152vQ
test

483 名前:デフォルトの名無しさん :01/08/27 17:52 ID:wWk80Tes
昔作ったプログラムを作り直しているのですが、ソースリストが長すぎるために
分割してみようと考えたのですが、今まで全て1本のソースでプログラムを作ってきたので
分割の仕方がよく分かりません。
ただ分割しただけでは、外部参照が未解決です・・・等のエラーが沢山出て
ビルドもできません。
ソースリストを分割する際には、どのような事に気をつけたら良いんでしょうか?

484 名前:デフォルトの名無しさん :01/08/27 18:17 ID:CbLq.TAQ
>>483
宣言と定義

485 名前:  :01/08/27 18:57 ID:vJfY8N1k
>>483
それってなんかC(C++)の基礎を理解してないってことに
起因してないかい?

486 名前:デフォルトの名無しさん :01/08/27 19:00 ID:wkdl9yNY
>>483
>分割してみようと考えたのですが、今まで全て1本のソースでプログラムを作ってきたので
>分割の仕方がよく分かりません。
ネタだよね?ね?

487 名前:472 :01/08/27 19:22 ID:s7D152vQ
SetPriorityClass関数を使いたいのですが、自分自身のプロセスのハンドルを
取得するにはどうすればいいのでしょうか。

488 名前:デフォルトの名無しさん :01/08/27 19:24 ID:6V5bAAt6
>>487

::GetCurrentProcess()

だったと思う。

489 名前:デフォルトの名無しさん :01/08/27 20:21 ID:7YRrwn2.
stlみたいなヘッダは、StdAfx.hでincludeするべきでしょうか?

490 名前:デフォルトの名無しさん :01/08/27 20:32 ID:xzJAo6XI
すみません、MFCが使いづらいのでMFCをマップしようと思うのですが、わかりません。

491 名前:デフォルトの名無しさん :01/08/27 20:53 ID:IiQ03hCY
VBから呼び出せるようにVC++でCOMを作りたいのですが、
最低限度、実装が必要となるインターフェイスはどれでしょうか?
よろしくお願いします。

492 名前:sage :01/08/27 21:30 ID:ABizV.k6
AddRef
Release
QueryInterface

MSDNヨメ

493 名前:デフォルトの名無しさん :01/08/27 22:16 ID:IiQ03hCY
>>492
それインターフェイスじゃないじゃん。
あんたホントに知ってる人?
知らないなら書かなくてもいいんだよ。

494 名前:483 :01/08/27 22:19 ID:wWk80Tes
>>484
宣言と定義ですか?とりあえず、#defineなどはヘッダにまとめて
インクルードしてるのですが、他に何か注意する所はありますか?

>>485
そうかもしれません・・・。

>>486
いえ、ネタではありません。
あ、ヘッダとリソースファイルなどはもちろん別ファイルでしたよ。
メインプログラムっていうか、本体が1つのソースファイルだけで
書いていたので、非常に長いのです。
これでは、デバッグもしずらくて・・・。

495 名前:493 :01/08/27 22:23 ID:IiQ03hCY
>>492
ごめん、頭冷やしてMSDN読み直す。
最近Windows用アプリ作り始めたバッカな素人な俺が悪い。
すまなかった。

496 名前:デフォルトの名無しさん :01/08/27 22:51 ID:8Xs.NW3U
>>494
とりあえず「関数の宣言と定義」を手持ちの
入門書かなんかで調べなされ。話はそれからだ。

497 名前: ◆arcElGGo :01/08/27 22:52 ID:/MRZ8T2M
>>491
必須のインタフェースは作るものによってまったく違うんじゃねーか?
ほんとにほんとに必須なのはIUnknownだが、
これだけあったところでどうにもならんぞ。

498 名前:デフォルトの名無しさん :01/08/27 23:19 ID:sw7RmyPw
>>483
もしかしてメイン関数がやたら長いプログラム?
それとも自分でいくつか関数作ったけど、ソースが一本なの?
意味あるかは別として例えばmain関数を1つのソースファイル
に書いて、mainから呼び出される自作サブルーチンを別のファイル
に書き、mainのファイルにそれらの関数のプロトタイプを記述する
ってのはどうよ。プロトタイプはまた別にヘッダファイルにした
ほうがいいかもしれんけど。ん?でもここはVC++のスレだよな。
クラスとか作ってるのかな?そんなふうには思えないが・・・。

499 名前:デフォルトの名無しさん :01/08/27 23:22 ID:NUyHCMlc
#include<xxxx>
class a{

};
class b{

};
class c{

};
class d{

};

int main(){




return 0;
}

500 名前:てんさいぷろぐらむぁ(偽) ◆8Fck5JHo :01/08/28 00:47 ID:zr9xTnZw
>>491

COMとして最低限必須なのは IUnknown
VBとかスクリプトの事を考えれば OLEAutomationの為にIDispatch が必要。
必然的にタイプライブラリも必要になります。

とりあえずIDLでIDispatch派生のインターフェイスを作って、MIDLでコンパイル。
出来たインターフェイスを使って実装&タイプライブラリをリンク。

IDispatch::Invokeの実装には、タイプライブラリを使えば比較的手抜きで実装可能。
LoadTypeLibだのLoadRegTypelibあたりを調べてください。

ここではaleaut32.dllに全てを任せる幸せな方法を想定しています。
VB向けならVARIANTで定義されている型で事足りると思うので。

後の説明は長くなるので省略。MSDNライブラリを参照してください。
とりあえず上記の流れがもっとも幸せな流れです。

OLEコントロール等を作るのならば、それなりに大変な事になると覚悟してください。

つーか
ATL使えばほとんど解決な気もするけど。


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.