■過去ログ置き場に戻る■
1-
前250
次250
最新50
[memo]
"9999999999_00.html#R20"
という感じで、URLの最後に "#R
レスNo
" を追加すると幸せになれます。
Win32API 質問箱 Build3
501
名前:
デフォルトの名無しさん
:02/05/02 18:08
そらそうだろ。
低域通過フィルタ作ってかぶせれば、なんぼかマシ
502
名前:
デフォルトの名無しさん
:02/05/02 19:18
ダイアログボックスで、Enterキーを押しても
終了しないようにするにはどうしたらいいですか?
503
名前:
デフォルトの名無しさん
:02/05/02 19:27
>>502
PreTranslateMessage()
504
名前:
502
:02/05/02 21:10
自己解決しました。
レスサンキュです。
#OKボタンのIDをIDOK以外にして、IDOKをハンドルしない。
505
名前:
デフォルトの名無しさん
:02/05/03 00:40
システム全体じゃなくて、特定のリストボックスやコンボボックスのみ
スムーズスクロールをオフにするAPIってないの?
506
名前:
デフォルトの名無しさん
:02/05/03 00:49
DestroyWindow
507
名前:
駆け出し
:02/05/03 04:06
StretchDIBitsでビットマップを表示すると色がフィルタをかけた様に
ボケてしまいます。5倍以上に拡大したときは何故かボケません。
508
名前:
デフォルトの名無しさん
:02/05/03 04:07
それはドライバ依存。
nVidiaのビデオカードだとボケる
509
名前:
駆け出し
:02/05/03 04:12
>>508
解りました。レスありがとうございます。
510
名前:
初
:02/05/03 04:47
あのう
WindowsプログラムのエントリポイントはWinMainだって書いてあったから
そう書いてコンパイルしようとしたら
「mainが未解決」みたいなこと言われるんですが何でですか?
511
名前:
デフォルトの名無しさん
:02/05/03 04:50
ダイアログリソースを動的に作って
CreateDialogIndirect使ってみたいんだけど、
参考になる(できればまるっきりそのまま使える)ソース無い?
512
名前:
デフォルトの名無しさん
:02/05/03 04:51
プロジェクト作成でコンソールを選んだんだろ
プロジェクト>設定>リンク のタブを選んで、
プロジェクトオプションの中の
/subsystem:consoleを/subsystem:windowsに変える
513
名前:
512
:02/05/03 04:53
キリ番とってた。
>>512
は
>>510
への返信ね
514
名前:
デフォルトの名無しさん
:02/05/03 04:54
>>512
リソースのダイアログをダンプしたのが一番参考になると思うが。
515
名前:
デフォルトの名無しさん
:02/05/03 09:48
HWNDは解っているExplorerが現在開いているディレクトリを
取得する方法ってありませんか?
現在は、ファイルパスをタイトルに表示、もしくはファイルパスを
アドレスバーに表示にして、そっちから取得してきているのですが、
これらを非表示(省略表示)にしても使える方法が知りたいのです。
516
名前:
デフォルトの名無しさん
:02/05/03 09:57
treeviewを覗く。
517
名前:
515
:02/05/03 10:46
環境を忘れました。Windows2000です。
>>516
Spy++で見てみたところ、treeviewを表示させない状態で開かれたエクスプローラには、
最初はtreeviewが存在せず、「Toolbar->フォルダ」を選択すると、
以降そのウインドウには BaseBar-SysTreeView32というものができ、非表示にしても
そのクラスが残るみたいです。
treeviewを表示させないで開いたやつからも取得したい(というか、区別したくない)ので、
他の方法は無いでしょうか。
518
名前:
デフォルトの名無しさん
:02/05/03 12:17
>>515
まっとうなやりかたなら、Shellからごりごりとだね。
519
名前:
515
:02/05/03 13:59
>>518
すみません、「Shellをごりごり」ってのは具体的には何を叩けばいいんでしょうか?
宜しければ参考になる資料か何かを教えてください。
520
名前:
デフォルトの名無しさん
:02/05/03 14:13
>>511
MSDNにDLGTEMPLというサンプルがある。
MFCだけど参考になると思う。
ちなみに、MFCはCDialog::DoModalでも
内部でLoadResourceしてからCreateDialogIndirectしてたような。
521
名前:
510
:02/05/03 15:05
>>512
さん、ありがちょう!
性交しましたサンクス!
522
名前:
デフォルトの名無しさん
:02/05/04 01:10
DLL内で起きて、そのDLL内で捕捉しなかった例外はどうなるのでしょうか?
そのDLL内の関数を呼び出した所に伝わるのでしょうか?
DLLが別のコンパイラ言語で作成されていても。
523
名前:
デフォルトの名無しさん
:02/05/04 01:14
WindowsのSEHなら伝わるんじゃないか?
524
名前:
デフォルトの名無しさん
:02/05/04 01:24
性交いうな
525
名前:
デフォルトの名無しさん
:02/05/04 01:25
ハァ?
526
名前:
デフォルトの名無しさん
:02/05/04 01:30
漏れも気になってた
527
名前:
デフォルトの名無しさん
:02/05/04 01:31
(*´Д`)ハァハァ
528
名前:
デフォルトの名無しさん
:02/05/04 02:58
>>507
SetStretchBltMode
529
名前:
デフォルトの名無しさん
:02/05/04 08:45
すごくしょもないことで申し訳ありませんが、
SendMessageでテキストボックスなどコントロールを
表示・非表示の切り替え や使用可能・不可能の切り替えはどう書けばいいでしょうか?
530
名前:
デフォルトの名無しさん
:02/05/04 09:26
SendeMessageよりは ShowWindow / EnableWindow を使うべし。
531
名前:
デフォルトの名無しさん
:02/05/04 12:46
lstrcpy と strcpy の速度を比較したら strcpyの方が圧倒的に(10倍とか)速い
んですが、そういうもんですか?
532
名前:
デフォルトの名無しさん
:02/05/04 12:53
そういうもんじゃない?
533
名前:
デフォルトの名無しさん
:02/05/04 14:26
そうだったのかぁ。知らなかった。
534
名前:
デフォルトの名無しさん
:02/05/04 14:28
>>531
lstrcpy は単純に movs で回してるから、データ量増えると遅いよ。strcpy は
4 バイト単位でコピーするように工夫してある。
535
名前:
デフォルトの名無しさん
:02/05/04 15:25
神がたくさんいるスレはここですか?
536
名前:
デフォルトの名無しさん
:02/05/04 15:29
lstrcpyはOSとのあいだでコンテキストスイッチがはいるから。
strcpyはユーザコード側で動くから、コンテキストスイッチ
しないので、たとえばlstrcpyとstrcpyがまったく同じコードでも
strcpyのほうがはやーくなるよ。
537
名前:
デフォルトの名無しさん
:02/05/04 15:41
コンテキストスイッチなんか入らないよ
538
名前:
536
:02/05/04 16:02
あら、コンテキストスイッチとは言わないですか
(コンテキストスイッチはスレッド切り替え時のみの用語?)
すまそ。
ようはLPCでOS側にスイッチしないといけないので
遅いと。
539
名前:
デフォルトの名無しさん
:02/05/04 16:03
>>536
嘘つけ。
Win32 API は OS 呼び出すモノも多いが、ユーザ空間で動く単なるライブラリ
関数も多数ある。嘘だと思うなら lstrcpy にブレークポイント設定して、デバッ
ガで追いかけてみ?
540
名前:
デフォルトの名無しさん
:02/05/04 16:05
>>538
知ったか逝って良し!
> ようはLPCでOS側にスイッチしないといけないので
してねーよ。だいたい LPC は NT Kernel 内部でメッセージ通信するために
使ってるメカニズムの名前で Win32 API 経由で OS 呼び出すときには int
(ソフトウェア割り込み) 使ってるだろ。
541
名前:
デフォルトの名無しさん
:02/05/04 16:16
>>538
カーネルモードに?
案外大げさな関数なんですね。
542
名前:
デフォルトの名無しさん
:02/05/04 16:23
あらま、激しくすまそ!
デバッガでlstrcpyおってみたら、確かにひねりのないループした
77E3317D mov al,byte ptr [ecx]
77E3317F mov byte ptr [edx],al
77E33181 inc ecx
77E33182 inc edx
77E33183 test al,al
77E33185 jne 77E3317D
えー、かなり昔のCマガでそんな記事を読んだような、
そのままそんな気がしてたのは気の成果..
lstrcpyとは関係ないけど、intの後引数変換とかでカーネルとlpcで
通信してるって話も気のせい?
一般的にはユーザアドレス空間内のデータをどうやってカーネルモード
のサービスにわたしてるの(共有メモリ?)
どうか教えて!!
543
名前:
デフォルトの名無しさん
:02/05/04 16:27
>>542
リバースエンジニアリングしやがった
タイーホ
544
名前:
デフォルトの名無しさん
:02/05/04 16:31
げ、俺もlstrcpyが遅いのはAPI呼び出しのオーバヘッドがあるからだとおもってた
槍田氏
545
名前:
デフォルトの名無しさん
:02/05/04 17:25
>>542
> lstrcpyとは関係ないけど、intの後引数変換とかでカーネルとlpcで
> 通信してるって話も気のせい?
気のせい。そもそも LPC は同一ホスト上のプロセス間通信に用いるメカニズム
で、プロセスのカーネルモードとユーザモードの間のデータ受け渡しに使うメカ
ニズムではないって。(むしろ RPC のローカルマシン限定版と思っておいた方
が近い)
NT 系列 (x86) だと、eax レジスタにシステムコール種別、edx レジスタにパラ
メタを設定して、ソフトウェア割り込み int 2E だったかな。
> 一般的にはユーザアドレス空間内のデータをどうやってカーネルモード
> のサービスにわたしてるの(共有メモリ?)
ふつーはカーネルモードもユーザモードも、同一の仮想メモリ空間を見てる
(ただしセキュリティ上の要請から、一部はカーネルモードでしか読み書きで
きないようにしておく)。
ソフトウェア割り込みが発生すると、
1. カーネルモードに移行する。
2. 割り込み種別に応じて、事前に設定しておいた割り込みハンドラが呼ばれる。
このときに、割り込み発生直前のプログラムカウンタ値などは、ハードウェア
が自動的にスタックに積む。
3. レジスタ or スタックから必要な値を取り出した上で、それを解析してカーネル
サービスを提供する。
という感じ。カーネルモードからユーザモードのメモリ空間は見えるので、必要な
データの読み書きは自由にできる(ただし validation 必須)。
ざっと読んだ感じ
一つのプロセスが、カーネルモードとユーザモードという二つの側面を持つ
ということを理解できてない気がするんだが。詳しくは、タネンバウム先生の
OS 入門書でも読んで勉強してくれ。
546
名前:
デフォルトの名無しさん
:02/05/04 19:15
ExtCreateRegionで作ったハンドルは後始末で何か必要ですか?
APIのHELPには何も書いてない。
DeleteObjectするとBoundsCheckerが文句たれます。
547
名前:
デフォルトの名無しさん
:02/05/04 19:31
なんか、詳しい人が一杯いますね。すごいなー。
548
名前:
デフォルトの名無しさん
:02/05/04 19:36
というか、strcpyとかmemcpyはインライン展開されなかったっけ?
549
名前:
デフォルトの名無しさん
:02/05/04 19:36
オプションによる
550
名前:
デフォルトの名無しさん
:02/05/04 19:37
memcpyは遅いので使いたくないに1票
551
名前:
デフォルトの名無しさん
:02/05/04 19:41
組み込み関数の展開させれば、rep movsb くらいには
最適化されると思うヨ
>550
552
名前:
デフォルトの名無しさん
:02/05/04 20:02
memcpyとCopyMemoryは同じくらいの速さですか?
553
名前:
デフォルトの名無しさん
:02/05/04 20:14
ねた?
554
名前:
デフォルトの名無しさん
:02/05/04 20:20
なんでそんなしょーもない低レベルの部分で早さを気にする?
そんなに気になるんじゃ、コピーしないで済む方法を考えろ
555
名前:
デフォルトの名無しさん
:02/05/04 20:25
>>552
同じくらいっつーか、同じ。
556
名前:
デフォルトの名無しさん
:02/05/04 21:08
>>554
正しい
557
名前:
デフォルトの名無しさん
:02/05/04 21:10
C++は知ってる
WindowsAPI 初心者が
Windows API without Direct X without MFC without SDLで
ゲームをつくれるまでいける
サイト無いですか?
558
名前:
デフォルトの名無しさん
:02/05/04 21:13
>>557
本買え。
559
名前:
デフォルトの名無しさん
:02/05/04 21:16
>>554
画像のコピーだったので。
自分でループまわしたらだいぶ速くなたーよ。
560
名前:
デフォルトの名無しさん
:02/05/04 21:20
memcpyと自分で回した場合の比較はここが詳しい
http://www-6.ibm.com/jp/developerworks/linux/011019/j_l-rt3.html
561
名前:
515
:02/05/04 21:30
>>519
どなたかたのんますage (;´д`)
562
名前:
デフォルトの名無しさん
:02/05/04 21:40
>>557
MSDN Library かな。あとは Petzold 本読め。
563
名前:
557
:02/05/04 21:44
>>562
良心的レスありがとうございます
564
名前:
519
:02/05/04 21:54
>>561
ごめんごめん。見逃してた。「Shelからごりごりと」ってのは、ShellWindows
などのオブジェクトを使うってこと。
ShellWindowsコレクションから、InternetExplorerオブジェクトが取得できる。
InternetExplorerって言っても、普通のExplorerも含むからおっけー。
そんで、InternetExplorerのLocationURLプロパティで、今開いているパスが
取得できる。vbs でのサンプルは↓な感じ。
Set s = CreateObject("Shell.Application")
Set sws = s.Windows()
h = ここにウィンドウハンドルを入れる
For Each i In sws
If i.hWnd = h Then
MsgBox i.LocationURL
End If
Next
565
名前:
デフォルトの名無しさん
:02/05/04 23:00
フリーセルとか秀丸とかメニューの右端に文字が書いてあるんですけど
これってどうやって表示するんですか?
566
名前:
デフォルトの名無しさん
:02/05/04 23:29
>>565
オーナードローでは?
567
名前:
デフォルトの名無しさん
:02/05/05 00:14
>>566
右端に文字列を表示する具体的な方法がわかりません
メニュー項目にBMPを表示する方法を解説したサイトは沢山あるんですが…
568
名前:
デフォルトの名無しさん
:02/05/05 00:31
>>567
右端の文字というのがアクセラレータのことなら、
メニュー アクセラレータ WM_COMMAND
あたりをキーにして検索してみては。
569
名前:
デフォルトの名無しさん
:02/05/05 00:35
>>568
全然違うよ。
秀丸はメニューの右横にカーソルインジケータを表示してる。
Window DCを取得して、自力で書いてるっぽい
570
名前:
568
:02/05/05 00:40
あ、違ったのか。
>>567
忘れてくらさい
571
名前:
568
:02/05/05 00:44
>>569
秀丸落としてみたけどカーソルインジケータって
何のことかわからない・・・。
572
名前:
568
:02/05/05 01:00
もしかして、
>>569
のはサブメニューの三角マークという落ちでそか
573
名前:
デフォルトの名無しさん
:02/05/05 01:11
>>568
メニューの横にカーソルの位置が書いてあるじゃん?
わかんない?
メニューの横って、フレームメニューの一番右端。
574
名前:
568
:02/05/05 01:14
あー!わかりました。
575
名前:
515
:02/05/05 01:38
>>564
ありがとうございます。参考にして調べてみたところ、方法は理解できました。
ただ、もう少し質問させてください。C++(BCC)/SDKで開発しております。
この環境で、
>>564
の CreateObject("Shell.Application") と同じことをやろうとしたら
どのように書いたらよいのでしょうか?
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q176792
に、
m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows));
という記述があったのですが、これをコンパイルしようとすると、
「ShellWindowsはSHDocVwのメンバーではない」 と言われてしまいます。
576
名前:
デフォルトの名無しさん
:02/05/05 01:50
UUID guid;
IShellWindows ishw;
UuidFromString(_T("Shell.Application"), &guid);
CoCreateInstance(guid, NULL, CLSCTX_INPROC_SERVER, IID_IShellWindows, &ishw);
じゃないのん?
577
名前:
565
:02/05/05 02:13
お答えありがとうございます
結局ウィンドウに直書きすることで解決しました
ところでメニューで使われてるフォントのハンドルって取得できるんでしょうか?
画面のプロパティでメニューフォントは変更可能ですよね?
578
名前:
577
:02/05/05 02:18
あ、いきなり SystemParametersInfo() で解決しました
579
名前:
515
:02/05/05 12:37
>>576
IShellWindowsは抽象クラスなので実体は作れない、といったエラーが発生しました。
Web上に C++/SDK 用の資料が殆ど見当たらないのが厳しい。
何か1つ動作するサンプルがあれば、もうちょい理解しやすそうなのですが(;´д`)
とりあえず本屋にでも行ってきます。
580
名前:
デフォルトの名無しさん
:02/05/05 12:58
>>579
いや、576はミスでIShellWindow* ishw;ダーヨ
581
名前:
515
:02/05/05 21:39
本屋にそれっぽいのが何も無くて鬱。
>>580
,
>>576
UuidFromString(_T("Shell.Application"), &guid);
HRESULT result = CoCreateInstance(guid, NULL, CLSCTX_INPROC_SERVER, IID_IShellDispatch, (void **)&pShellWindows);
if (FAILED(result)) {
printf("failed\n");
return 1;
}
//pShellWindows->GetCount();
pShellWindows->Release();
これはfailedが表示されますので、多分guidが間違ってるのかと推測しました。
で、CoCreateInstanceの第1引数を、CLSID_Shellにするととりあえず
failedは表示されないようになるのですが、その後に
>>575
のURLを参考に
pShellWindows->GetCount(); とやってみたところ、
「GetCountはIShellWindowsのメンバではない」と言われ、コンパイルがとおりません。
582
名前:
デフォルトの名無しさん
:02/05/05 23:15
UuidFromString -> CLSIDFromString
んで、IShellDispatch::WindowsでIDispatchを得て・・・
ってな感じで、オートメーションを利用しないとだめっぽ
583
名前:
デフォルトの名無しさん
:02/05/06 00:48
waveOutGetDevCaps()で情報を取得したところ、
wMid = 1
wPid = 100
vDriverVersion = 0.1280
szPname = YAMAHA DS-XG Audio (WDM)
dwFormats = 4095
wChannels = 65535
dwSupport = 0x2c
↑のようにwChannelsが65535になっちゃったのですが、
これってどういうケースなんでしょうか?
584
名前:
デフォルトの名無しさん
:02/05/06 00:54
>>583
チャンネル数65536個のスーパー音源
585
名前:
デフォルトの名無しさん
:02/05/06 01:03
>>583
ステレオ
586
名前:
デフォルトの名無しさん
:02/05/06 01:27
>>585
ありがとうございます。
ところで、どうして65535がステレオなのでしょうか?
MSDNにその記述が見つからないのですが。
1か2としか書いてなかったので。
587
名前:
デフォルトの名無しさん
:02/05/06 01:43
いまさら「適当でした」とか言ったらぶっ殺されるだろうか・・・
(((;゚Д゚)))ガクガクブルブル ちなみにうちも65535返します・・・
588
名前:
デフォルトの名無しさん
:02/05/06 02:02
モノラルしかサポートしてないサウンドカードなんて無視していいんじゃねーの?
ちなみにウチのDS-XG Wave Playbackはなぜか4を返している。
WAVE_MAPPERを指定してやるとちゃんと2を返すんだが。よくわからん。
589
名前:
デフォルトの名無しさん
:02/05/06 02:20
(((;゚Д゚)))ガクガクブルブル ああ、うちもWAVE_MAPPER指定で2を返した
590
名前:
583
:02/05/06 04:26
ウチもWAVE_MAPPERを指定すると2を返します
んー、なんでだろ
591
名前:
デフォルトの名無しさん
:02/05/09 02:21
winInetを使って、色々と試しているのですが
タイムアウトの設定変更がうまくできません。
Win2k(SP2)+IE5.5SP2で、BCB5Proをつかってます。
HINTERNET hSession;
DWORD Timeout;
DWORD newTimeout;
DWORD BufSize;
bool isResult;
char buf[1024];
hSession = InternetOpen( "MyApp", INTERNET_OPEN_TYPE_DIRECT, NULL,NULL, 0 );
BufSize = sizeof(DWORD);
InternetQueryOption(NULL, INTERNET_OPTION_CONNECT_TIMEOUT, &Timeout,&BufSize);
sprintf(buf,"初期状態の接続タイムアウト: %d msec", Timeout);
printf("%s\n",buf);
if( hSession ){
newTimeout = (DWORD)15*1000; //15秒に設定
isResult = InternetSetOption(hSession,INTERNET_OPTION_CONNECT_TIMEOUT,&newTimeout,sizeof(newTimeout));
if(!isResult) {
printf("設定失敗\n");
}
else {
InternetQueryOption(NULL, INTERNET_OPTION_CONNECT_TIMEOUT, &Timeout,&BufSize);
sprintf(buf,"設定変更後の接続タイムアウト: %d msec", Timeout);
printf("%s\n",buf);
}
}
InternetCloseHandle(hSession);
って、たったこれだけなんですが標準状態の300秒から変わってくれません。
何かアドバイスもらえませんか?
IE5.0ではバグがあったが、5.01でなおしたというMS情報には
たどり着いたんですが、5.5でこの機能は無くなってしまったんでしょうか?
#IEコンポーネントを使い倒すスレの方が良かったのか。。。
592
名前:
デフォルトの名無しさん
:02/05/09 03:17
InternetQueryOptionの第一引数ってNULLじゃなくて
hSessionじゃあないのかなあ、とか
その設定は hSession が Open されている間しか有効じゃないような
気がするなあ、とか
593
名前:
デフォルトの名無しさん
:02/05/09 03:50
ぐおぉ、神様、仏様、592様
マジでこんなに遅くありがとうございました。
つーか、俺がバカなだけでしたね。。。。
おっしゃるとおり
InternetQueryOption(hSession, INTERNET_OPTION_CONNECT_TIMEOUT, &Timeout,&BufSize);
としたら、一発でした。
マジでありがとうごぜーますだ。
594
名前:
デフォルトの名無しさん
:02/05/09 14:07
mingw32でwindowsプログラムを
始めようと思います
windows APIでプログラムする範囲で、
VC++にできてmingwでできないことはあるのでしょうか?
595
名前:
デフォルトの名無しさん
:02/05/09 14:26
コンパイルオプションに関して質問なんですがいいですか?
/Zc:wchar_t,forScope
このオプションを/cと併用するとファイル名とみなされて
しまうんですがどうしたらいいでしょうか?
やりたいことはこうです。
$cl /Zc:wchar_t,forScope /CLR /c *.cpp
596
名前:
デフォルトの名無しさん
:02/05/09 14:52
IE6で、お気に入りのアイコンを押すと、左にお気に入りのウィンドウが表示されますが
あれって、どのAPIを使用すれば実現できますか?
597
名前:
デフォルトの名無しさん
:02/05/09 18:38
ファイルが移動可能かどうか調べるには、どんな方法がありますか?
598
名前:
デフォルトの名無しさん
:02/05/09 19:07
>>594
WindowsAPIがすべて使えればWindows上で出来ることに関しては出来ないことはない。
599
名前:
デフォルトの名無しさん
:02/05/09 19:16
COM関連わ?
600
名前:
デフォルトの名無しさん
:02/05/09 19:41
>>599
問題ない
601
名前:
594
:02/05/09 20:09
>>598-600
レスありがとうございます
じゃ、mingw32使ってみます
602
名前:
ばか者D
:02/05/09 21:12
IE が使用する Client UrlCache について操作する
モジュールについて説明されている場所をご存知の方
教えて頂けませんか?
IEの作成するキャッシュデーターを操作するのが目的です
603
名前:
デフォルトの名無しさん
:02/05/09 22:11
>>594
SJIS や UNICODE の文字列リテラルを使うこと、かなぁ。あとはリソース関連
も辛くない?
604
名前:
デフォルトの名無しさん
:02/05/09 23:13
Wininet.dllのInternetReadFile関数ってHDDにバッファを書き込むのでしょうか?
InternetReadFileを使ったプログラムのI/Oをタスクマネージャでモニタリングしてると、
InternetReadFileのファイル取得ループ内にHDDに書き込んでいるようなのですが・・・
ちなみにVBだったりするんですけど、VCも同じなのかな・・・?
605
名前:
デフォルトの名無しさん
:02/05/09 23:24
メモリに書いても、場合によってはスワップにかかるから、
HDDにアクセスすることはある。
606
名前:
デフォルトの名無しさん
:02/05/09 23:27
>>605
スワップは0に設定してあって、メモリだと思うのですが・・・。なんでだろう・・・。
607
名前:
デフォルトの名無しさん
:02/05/09 23:42
普通に使ってるとディスクキャッシュするのでは?>WinInet
何かNOCACHEとかオプションあるのかもしれないが。
608
名前:
デフォルトの名無しさん
:02/05/09 23:57
>>607
HttpOpenRequestのオプチョンに
INTERNET_FLAG_NO_CACHE_WRITE
INTERNET_FLAG_PRAGMA_NOCACHE
がありました!とりあえず試してみます。
609
名前:
デフォルトの名無しさん
:02/05/10 00:08
>>607
わーーーおぉおおぉぉぉおぉおおぉ。いけました!
べりーべりーさんくすです。
これで2重書き込みしなくて済みそうです。
どうもでした
610
名前:
デフォルトの名無しさん
:02/05/10 12:25
プロパティページの WM_INITDIALOG では、ボタンのテキストを
変更できないんでしょうか。どういう訳か、変更されません。
こういう仕様なのかなとも思うんですが、みなさんの環境でも同じ
現象が起こりますでしょうか?
BOOL CALLBACK MyPropPageProc(HWND hDlg, UINT uMsg, WPARAM, LPARAM)
{
switch (uMsg) {
case WM_INITDIALOG:
{
// ボタンテキストの変更 (失敗する)
HWND hBtn = GetDlgItem(hDlg, IDC_BTN_XXXX);
SetWindowText(hBtn, "hogehoge");
}
return TRUE;
}
return FALSE;
}
通常のダイアログ(プロシージャ)では上手く変更できます。ペゾルド本
などを漁ってみましたが、それらしい記述は見当たりませんでした。
件に関して何か情報をお持ちでしたら、よろしくお願いします。
611
名前:
デフォルトの名無しさん
:02/05/10 15:45
610
SetDlgItemText()
612
名前:
デフォルトの名無しさん
:02/05/10 18:37
CreateProcessで起動したプロセスハンドルのCPU使用率を
求めたいのですが、どのような方法がありますでしょうか。
どうか教えてください。
613
名前:
デフォルトの名無しさん
:02/05/10 18:43
PDH
614
名前:
デフォルトの名無しさん
:02/05/10 19:01
>>610
環境は?
WM_INITDIALOGは来てる?
どうゆう環境だったかでプロパティシートでWM_INITDIALOGが
来ないって現象があったようななかったような。
普通は610のコードで問題ないはずだけど。
615
名前:
デフォルトの名無しさん
:02/05/10 22:11
BCCでWinMain変数使おうとしたら、こんなエラーが出ました。
Error: 外部シンボル '_main' が未解決(C:BORLAND\B
CC55\LIB\C0X32.OBJ が参照)
などというエラーが出ます。
BCC5.5.1.2
winXP
どうか助けてください。
616
名前:
デフォルトの名無しさん
:02/05/10 22:12
>>615
ウインドウズ用にコンパイルしてますか?
617
名前:
デフォルトの名無しさん
:02/05/10 22:13
-tW
618
名前:
デフォルトの名無しさん
:02/05/10 22:22
基本的なことが分かってないので教えてください。
ソケットを作ってrecvしたんですけど、中身を表示すると
文字化けしています。でもたまに平気なサイトもあります。
キーワード何で調べればいいですか?
(エンコード、変換、関数、文字化けなどで調べました。
CGIの説明で惜しいのはあるんですけど、やっぱり
さっぱりです。お救いください)
619
名前:
デフォルトの名無しさん
:02/05/10 22:24
610
static HWNDにしな。
620
名前:
デフォルトの名無しさん
:02/05/10 22:24
>>618
あなた、マルチポストについてまず謝ってください。
621
名前:
デフォルトの名無しさん
:02/05/10 22:28
wakaTtayoGomennne..
622
名前:
デフォルトの名無しさん
:02/05/10 22:29
>>620
あなたになんで謝るの??
623
名前:
デフォルトの名無しさん
:02/05/10 22:29
今度は、外部シンボル'_main'が未解決のところが、
外部シンボル'WinMain'が未解決
になっただけでした。
いったいどういうことなんだ。
>>616
>>617
さんありがとうございます。
624
名前:
デフォルトの名無しさん
:02/05/10 22:30
WinMainを書いてないからだろ
スペルミスとか、ソース入れ忘れとか
625
名前:
デフォルトの名無しさん
:02/05/10 22:33
だからー、そもそもこれは文字化けなのかも謎だし、
おせーてくれ。
626
名前:
デフォルトの名無しさん
:02/05/10 22:33
>>624
さん、何回見てもWinMainとかいてあります・・・。
627
名前:
デフォルトの名無しさん
:02/05/10 22:38
>>625
socketについて・・・いや、そのインターネット=WWWっていうお前は素人か?っていう発想からたたき直してこい。
628
名前:
デフォルトの名無しさん
:02/05/10 22:39
>>626
引数変とか。思いっきりオーバーロードになってたり。
629
名前:
デフォルトの名無しさん
:02/05/10 22:45
>>626
WinMainのプロトタイプと、コンパイル時のコマンドラインを書いてみろ
630
名前:
デフォルトの名無しさん
:02/05/10 22:46
>>628
初心者なのでよく分かりませんが、多分大丈夫だと思います。
631
名前:
デフォルトの名無しさん
:02/05/10 22:48
>>630
初心者なら勝手に大丈夫だと決めつけないで、聞かれたことには答えておきなさい
632
名前:
デフォルトの名無しさん
:02/05/10 22:58
>>629
さん、一応ソース全文をのせときます。
ちなみに"helloworld"と表示するだけの単純なものです。
#include<windows.h>
int APIENTRY WinMain (/*HINSTANCE hInst, HINSTANCE hPrevInst,
LPSTR lpCmdLine, int nCmdShow*/)
{
MessageBox(NULL,"hello world","hello world", MB_OK);
return 0;
}
コンパイル時のコマンドラインは
bcc32 -tW winhello.cpp
です。どうにかならないでしょうか・・・。
633
名前:
デフォルトの名無しさん
:02/05/10 22:59
>>632
int APIENTRY WinMain (/*HINSTANCE hInst, HINSTANCE hPrevInst,
LPSTR lpCmdLine, int nCmdShow*/)
なぜにコメントアウト・・・?
634
名前:
デフォルトの名無しさん
:02/05/10 23:01
>>631
初心者だからってあまり舐めないでください。
635
名前:
デフォルトの名無しさん
:02/05/10 23:02
>>634
なめられるに値することしてるぞ?
636
名前:
デフォルトの名無しさん
:02/05/10 23:05
>>633
自分でも気づかなかった・・・。
普通にコンパイル、リンク、実行、できてしまいました。
レスしてくださった皆様、本当にすいませんでした。
637
名前:
デフォルトの名無しさん
:02/05/10 23:09
>初心者なのでよく分かりませんが、多分大丈夫だと思います。
で
>int APIENTRY WinMain (/*HINSTANCE hInst, HINSTANCE hPrevInst,LPSTR lpCmdLine, int nCmdShow*/)
>>636
はネタかアフォか神か?
638
名前:
デフォルトの名無しさん
:02/05/10 23:13
>>615
おい!今WTLのウィザードで作り、Debugで動いてるのをReleaseで
コンパイルしたら、同じエラーが出たよ!こっちはVC++だけどなんて偶然!
というわけで鬱鬱……なんで〜オレのアフォー(;´Д`)
639
名前:
638
:02/05/10 23:21
真面目にお訊きします。VC++6、WTLのウィザードでダイアログベースの
アプリを作成し、Debug版では問題なく動いているのですが
Release版だと次のエラーが出てしまいます…。
LIBCMT.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です
Release/rd_setup.exe : fatal error LNK1120: 外部参照 1 が未解決です。
Debug版だと動くのが不可解で…。便乗ですがよろしくお願いします。
640
名前:
615
:02/05/10 23:22
オレはなんてアフォなんだ〜〜〜〜〜〜〜
641
名前:
デフォルトの名無しさん
:02/05/10 23:22
プロジェクトのオプション設定で-subsystem:windowsにしろ
642
名前:
デフォルトの名無しさん
:02/05/10 23:27
ATL_MIN_CRT指定してて、かつ、CRTライブラリが必要な
関数を使っていると、リンク時にmainがないと怒られる。
ソースからぁゃιぃコードを処理するか、MIN_CRTをあきらめるか、
どっちかにするとよい。
643
名前:
638
:02/05/10 23:44
>>641-642
ででで、できました!これで何をやったのか分からないので、
これから調べてきます。本当にありがとうございました。
オレもなんてアフォなんだ〜〜〜(゚∀゚)〜〜〜
644
名前:
デフォルトの名無しさん
:02/05/11 06:42
LoadLibrary()でDLLを呼び出したはいいんですが、DLLにあるクラスには
どうやって手を出せばいいんでしょうか。
「DLL内の関数アドレスを取得する」というGetProcAddress()しかありません。
何とぞ、よろしくお願いいたします。
645
名前:
デフォルトの名無しさん
:02/05/11 06:57
>644
各メソッドの修飾された関数名を使ってGetProcAddress()する、
のかなあ・・・?
コンストラクタやデストラクタの処理とか大変そう。
DLL側の仕様を変更できるならそっちを考え直した方がいいでしょうね。
COMにするとか、第一引数でthisを(ハンドルみたいに)渡すように
するとか。
646
名前:
デフォルトの名無しさん
:02/05/11 07:05
動的結合じゃ解決できないんで、
静的もしくは遅延結合で解決するしかありません
647
名前:
デフォルトの名無しさん
:02/05/11 11:37
BCC 5.5.1を使ってSDKのアプリを作ろうとしているのですが、質問があります
InvalidateRect(hStatic, NULL, TRUE)によってSTATICの部分のみを
任意のタイミングで再描画させようと思うのだけどイマイチ動作が不審
一応iが加算はされているから、WM_PAINTは呼ばれているようなのですが
パラメータでNULLを指定しているのに背景色で塗りつぶされません
hStaticをグローバル宣言にしても同様の結果でした
ソース
#include<windows.h>
LRESULT CALLBACK StaticProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
static int i=0;
TCHAR wcStr[128];
HDC hDC;
PAINTSTRUCT ps;
static WNDPROC *pDefStaticProc;
if (hwnd==NULL){ pDefStaticProc=(WNDPROC *)wp; return 0; }
switch (msg) {
case WM_PAINT:
i++;
hDC=BeginPaint(hwnd, &ps);
SetBkMode(hDC, TRANSPARENT);
wsprintf(wcStr, TEXT("i=%d"), i);
TextOut(hDC, 10, 10, wcStr, lstrlen(wcStr));
EndPaint(hwnd, &ps);
return 0;
}
return CallWindowProc(*pDefStaticProc, hwnd, msg, wp, lp);
}
648
名前:
sage
:02/05/11 11:37
LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
static HWND hStatic;
static WNDPROC DefStaticProc;
switch (msg) {
case WM_CREATE:
hStatic=CreateWindowEx(0, "STATIC", NULL, WS_CHILD | WS_VISIBLE,
10, 10, 100, 100, hwnd, (HMENU)100,
(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL);
DefStaticProc=(WNDPROC)GetWindowLong(hStatic, GWL_WNDPROC);
StaticProc(NULL, 0, (WPARAM)(&DefStaticProc), 0);
SetWindowLong(hStatic, GWL_WNDPROC, (LONG)StaticProc);
return 0;
case WM_LBUTTONDOWN:
InvalidateRect(hStatic, NULL, TRUE); return 0;
case WM_DESTROY:
PostQuitMessage(0); return 0;
}
return DefWindowProc(hwnd, msg, wp, lp);
}
649
名前:
デフォルトの名無しさん
:02/05/11 11:38
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
PSTR lpCmdLine,int nCmdShow ) {
HWND hwnd;
MSG msg;
WNDCLASS wc;
wc.style= CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc=WndProc;
wc.cbClsExtra=wc.cbWndExtra=0;
wc.hInstance=hInstance;
wc.hIcon=LoadIcon(NULL ,IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL ,IDC_ARROW);
wc.hbrBackground=(HBRUSH)COLOR_WINDOW;
wc.lpszMenuName=NULL;
wc.lpszClassName=TEXT("Tom");
if (!RegisterClass(&wc)) return 0;
hwnd=CreateWindowEx(
0, TEXT("Tom"), TEXT("Jim"), WS_OVERLAPPEDWINDOW | WS_VISIBLE,
100, 100, 200, 200, NULL, NULL, hInstance, NULL);
if (hwnd==NULL) return 0;
while(GetMessage(&msg, NULL, 0, 0)) DispatchMessage(&msg);
return msg.wParam;
}
ソースここまで
hStaticをhwndにすれば一応ちゃんと動作はしますが、それだと何か嫌なので...
何が原因なのでしょうか?分かる方がおりましたら、解決法をおねがいします
650
名前:
デフォルトの名無しさん
:02/05/11 11:39
名前にsageとか書いてしまった...鬱だ...
651
名前:
デフォルトの名無しさん
:02/05/11 14:49
>>647-649
> パラメータでNULLを指定しているのに背景色で塗りつぶされません
どこのことだ。NULLって。
652
名前:
デフォルトの名無しさん
:02/05/11 15:13
>>651
InvalidateRect(hStatic, NULL, TRUE)
多分↑の2つ目の引数
653
名前:
644
:02/05/11 16:02
レスthanks
ひょっとしてDLLにあるクラスを使うというのは一般的じゃないんですか?
インポートライブラリーを使えばできるんですが・・・。
いまいち勉強が足りないんでしてきます。
654
名前:
デフォルトの名無しさん
:02/05/11 16:55
WindowsにはCOMがあるからいいけど、
UNIXでC++のライブラリを使う場合は静的バインドしか
ないのかな?房&スレ違いスマソ
655
名前:
デフォルトの名無しさん
:02/05/11 17:02
>>654
カーネルにはモジュールとかあるけどね。
656
名前:
デフォルトの名無しさん
:02/05/11 17:27
以下がコンパイラやバージョンで異なるため、C++クラスライブラリは
UNIXではあんまり使いやすくない。
もちろん閉じた環境(g++2.95以外使わない等)であれば問題ないけど。
1.メソッドの引数や戻り値の型情報をそのシンボル名に埋め込む方法
2.例外の扱い
3.フリーストアの扱い
4.テンプレートの実体化の方法
5.static initializerの実行方法
COMではこういう問題は起こらないことになってる。
657
名前:
デフォルトの名無しさん
:02/05/11 17:46
inner-process限定だったとおもうけど、もじらの
XPCOMとか。
658
名前:
デフォルトの名無しさん
:02/05/11 18:21
>>656
なるほど、房に対しての親切なお答えありがとうございます。
659
名前:
647-649
:02/05/11 19:22
>>651
InvalidateRect(hStatic, NULL, TRUE)の中のNULLの事です
>>652
フォローサンクスです
660
名前:
デフォルトの名無しさん
:02/05/11 21:04
Win32APIでLIBを作ろうと思うのですが、関数の宣言に「WINAPI」というのを
つけなければならないのでしょうか?
661
名前:
デフォルトの名無しさん
:02/05/11 21:06
>>660
いーえ。別に付けなくとも宜しい。WINAPI は __stdcall のことで、__stdcall の意味はヘルプで見れば出てきます。自分で判断したまい。
662
名前:
デフォルトの名無しさん
:02/05/11 21:07
>>661
PASCAL
663
名前:
デフォルトの名無しさん
:02/05/11 21:27
>>662
何が言いたいんだ?
664
名前:
デフォルトの名無しさん
:02/05/11 21:48
>>663
662では無いが、PASCAL形式の呼び出しルールって事だろ。
665
名前:
デフォルトの名無しさん
:02/05/11 21:55
#define PASCAL __stdcall
#define FAR __far
#define WINAPI FAR PASCAL
666
名前:
デフォルトの名無しさん
:02/05/11 22:02
MSDNの__stdcallの項目に
/Gz コンパイラ オプションを指定すると、ほかの呼び出し規約で
明示的に宣言されていないすべての関数が __stdcall になります。
とありました。
AppWizardでスタティックライブラリプロジェクトを選択したところ、
プロジェクト設定に/GZオプションが設定されていました。
ということは、この場合WINAPIを明示的に書かなくても自動的に
__stdcall=WINAPIを書いたことと同じことになるのでしょうか?
667
名前:
デフォルトの名無しさん
:02/05/11 22:12
なる、が、ソースだけ見たとき __stdcall/PASCAL/WINAPIが関数名についていると
一目で外向けインタフェースだとわかるし、
万が一だれかがコンパイルオプションを変更してたとしても問題が出なくなる。
書くべきところには、明示的に書いた方がいい。
668
名前:
デフォルトの名無しさん
:02/05/11 22:12
>>664
Win32ではPASCAL規約はなくなりました__stdcallに置き換えられます
みたいな記述がどこかにあった
したがって__stdcallが現在の呼び方なのだろう
669
名前:
デフォルトの名無しさん
:02/05/11 22:14
>獣の数字
CL のオプションはcase-sesitive。
/GZはデバッグ関連のオプションかと。
670
名前:
デフォルトの名無しさん
:02/05/11 22:15
>>668
実際PASCAL呼び出し形式とstdcall呼び出し形式は違ったはず。
WIN16時代やね。
671
名前:
デフォルトの名無しさん
:02/05/11 22:15
PASCAL呼び出し形式は、Win16の時の名前。
Win32ではSTDCALLと称する、という話があったような。
672
名前:
デフォルトの名無しさん
:02/05/11 22:16
>>667
なるほど、これですっきりしました。
>>661
からの流れで、明示的に書かなくてもいいけど
書いておいたほうが良いということですね。
673
名前:
デフォルトの名無しさん
:02/05/11 22:18
>>669
え!/Gzと/GZは違うんですか…
674
名前:
デフォルトの名無しさん
:02/05/11 22:18
>>672
いや、書かないと_cdeclに。
C同志で双方のプログラマが申し合わせてるなら良いけど・・・。
675
名前:
デフォルトの名無しさん
:02/05/11 22:20
C++Builder 6 はご存じのように32ビットコンパイラですが、
__pascal キーワードが未だ存在しています。__stdcall とは別物です。
Pascal 言語である Delphi との互換性のためにあるのかと思いきや、
Delphi のデフォルトは fastcall です。なんじゃこりゃ。
676
名前:
デフォルトの名無しさん
:02/05/11 22:21
本当だ、/GZはデバッグビルド時についてるローカル変数初期化オプションだった…
677
名前:
デフォルトの名無しさん
:02/05/11 22:24
>>675
fastcall = PASCALじゃないの?
Win16がなぜPASCALだったのかというとそれが一番高速だった(関数側でプッシュポップ?)からとかなんとか。
678
名前:
デフォルトの名無しさん
:02/05/11 22:29
>>677
fastcall はレジスタ渡しです。32ビット以下のサイズの引数3つまで、レジスタに入れて渡します(残りはスタック)。MS の fastcall と Borland の fastcall は互換性がないらしく、__msfastcall というキーワードもあります。。。
679
名前:
デフォルトの名無しさん
:02/05/11 22:34
あのー、結局外から呼び出される関数にはWINAPIつけとけってことなんでしょうか…
680
名前:
デフォルトの名無しさん
:02/05/11 22:39
まあWINAPIがMSとBorlandで異なることは無いだろうしねえ・・・
681
名前:
デフォルトの名無しさん
:02/05/11 22:39
>>679
付けとけばとりあえず問題はない。
付けない場合は以下のような問題があるが、当てはまらない場合は付けなくても良い。
「コンパイルオプションを変えてデフォルトの呼び出し規約を変更してしまったら、そのライブラリを呼び出せない。」
682
名前:
デフォルトの名無しさん
:02/05/11 22:45
>>681
わかりました。つけておくことにします。
ありがとうございました。
683
名前:
デフォルトの名無しさん
:02/05/11 23:32
>>644
Microsoft 的正解は
COM にする
じゃないかなぁ。
684
名前:
デフォルトの名無しさん
:02/05/11 23:38
>>656
COMはOSに統合されたミドルウェアだから
そこでCOMを持ち出すのはアンフェアじゃないか?
685
名前:
デフォルトの名無しさん
:02/05/11 23:45
KOU Kou[6];
hFile = CreateFile("Kou.dat",GENERIC_READ,0,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,NULL);
//読みこみを失敗したら終了
if(hFile == INVALID_HANDLE_VALUE){
ErrorRead();
GameExit();
}
ReadFile(hFile,&Kou,sizeof(KOU)*6,&byteCount,NULL);
CloseHandle(hFile);
ReadFileの中は,あっているんでしょうか?
686
名前:
デフォルトの名無しさん
:02/05/11 23:50
>>685
その場合も&いらない。
687
名前:
デフォルトの名無しさん
:02/05/11 23:53
> KOU Kou[6];
なら、次のどれか。
ReadFile(hFile,&Kou,sizeof(KOU)*6,&byteCount,NULL);
ReadFile(hFile,Kou,sizeof(KOU)*6,&byteCount,NULL);
ReadFile(hFile,&Kou,sizeof(Kou),&byteCount,NULL);
ReadFile(hFile,Kou,sizeof(Kou),&byteCount,NULL);
Cスレの前の方にあった
> KOU *Kou = /*なんかメモリ確保関数 */
の場合なら話は別。
688
名前:
デフォルトの名無しさん
:02/05/11 23:59
>>686
ありがとうです
配列ですもんね
居酒屋行って来ます
689
名前:
645
:02/05/12 05:38
>>653
(DLLのC++クラスを利用する)
インポートライブラリを使えば簡単にできてしまいますね。でも…。
装飾関数名の問題(
>>656
さんの1と同じこと)とかLoadLibrary()で
使えなくなるとかいうことを考えると、後々になってそのDLLを
利用するときに困る*かも*しれません。
とにかく個人的にはお勧めしません。
>683
に同感です。
690
名前:
デフォルトの名無しさん
:02/05/12 06:37
言語/処理系入り乱れを無視していいなら、普通のC関数exportして、そん中で
newしたclassのポインタ戻すって手はあるがなぁ。
まぁでもやっぱCOMだろうな。
691
名前:
デフォルトの名無しさん
:02/05/12 12:04
_stprintf と wsprintf
_tcscpy と lstrcpy
など、同じことをする関数だと思うのですが、何か違う働きをするのでしょうか?
692
名前:
デフォルトの名無しさん
:02/05/12 12:14
>>691
>_stprintf と wsprintf
取りあえずwsprintfはWindowsAPI
693
名前:
デフォルトの名無しさん
:02/05/12 12:18
>>692
誰もそんなこと聞いてないと思われ
694
名前:
デフォルトの名無しさん
:02/05/12 12:20
>>692
Linuxではswprintfか。紛らわしいな。
695
名前:
デフォルトの名無しさん
:02/05/12 12:22
wsprintfは浮動小数点をサポートしない
_tcscpyとlstrcpyは同じ。
ちなみにlstrncpyは末尾に必ず'0をコピーするが、
_tcsncpy/strncpy/_mbsncpyは0はコピーしない処理系もある。
書式、長さを扱う文字列処理関数の場合、
APIで指定したロケールSetThreadLocaleに従うか、
setlocale, _tsetlocaleで指定したロケールに従うかで
挙動が変る可能性がある。
696
名前:
井筒監督
:02/05/12 12:22
俺はWin32API使うようにしてる。
理由?そんなもん無い。そんなもん無くたっていい。
697
名前:
デフォルトの名無しさん
:02/05/12 12:24
>>694
Windowsの処理系にもswprintfはある。
sprintfのwchar_t版だろ。
swprintfとwsprintfは別物
698
名前:
デフォルトの名無しさん
:02/05/12 12:28
ほんとだ、%fが無い。
699
名前:
デフォルトの名無しさん
:02/05/12 12:32
俺はC関数のほう使うようにしてる。
700
名前:
デフォルトの名無しさん
:02/05/12 12:33
>>698
小数点型って言語依存したような。
701
名前:
デフォルトの名無しさん
:02/05/12 14:17
>sprintfのwchar_t版だろ。
wsprintfWダネ
702
名前:
デフォルトの名無しさん
:02/05/12 14:44
swprintfとwsprintfは別物だっつーの。
つまりswprintfとwsprintfA/wsprintfWは別物なの。
知ったかぶっても恥ずかしいだけなの
703
名前:
デフォルトの名無しさん
:02/05/12 15:01
んでどうよ。おまえらどっち使ってんのよ。
704
名前:
デフォルトの名無しさん
:02/05/12 15:06
_sntprintf/_vsntprintf
705
名前:
デフォルトの名無しさん
:02/05/13 03:51
あるウィンドウ(A)がアクティブになったことを別なウィンドウ(B)に知らせるAPIはありますか?
(A)のメッセージをフックして(B)に通知する以外の(DLLが不要な)方法を知りたいです
706
名前:
デフォルトの名無しさん
:02/05/13 03:57
WM_ACTIVATE
707
名前:
デフォルトの名無しさん
:02/05/13 05:04
>>706
それはフックしないと読みとれないからダメなんです
708
名前:
デフォルトの名無しさん
:02/05/13 05:12
自分自身が非アクティブの時でもって事か?
709
名前:
デフォルトの名無しさん
:02/05/13 05:53
えーとつまり(A)も(B)も他のプロセスのウィンドウなのでフックしないと読めないんです
自分のプロセスだったらAPIも何もないんですが
710
名前:
デフォルトの名無しさん
:02/05/13 06:04
タイマー回して現在のアクティブウィンドウとAを比較
同じならBにメッセージを送る
・・・くらいしか思いつかん
他にいい方法あるんかいな
711
名前:
デフォルトの名無しさん
:02/05/13 06:23
自分自身がアクティブだったら、
他のウインドウがアクティブになり、自分が非アクティブになることを
WM_ACTIVATEで伝えてくれるんだが、これじゃ不足なのか?
もちろん、どのウインドウがアクティブになるのかも伝えてくれるんだが
712
名前:
デフォルトの名無しさん
:02/05/13 09:24
>>711
試しにコードを書けば判りますが、どのウインドウがアクティブになるのかは伝えてくれません
ともかく特定のウィンドウがアクティブじゃないと通知されないというのだと全く役に立たないんです
タイマーは回しすぎると処理が重くなりますし、回しが少ないとラグが発生してしまいます
アクティブウィンドウの変化を特定ウィンドウに知らせるようなAPIはないもんですかね
713
名前:
デフォルトの名無しさん
:02/05/13 09:26
>>712
フックすればいいじゃん。
714
名前:
デフォルトの名無しさん
:02/05/13 09:58
>>713
>>705
715
名前:
デフォルトの名無しさん
:02/05/13 09:59
>>714
無い以上そうするしかないんじゃ?
実力がないなら実力以上のことはしないことだ。
716
名前:
デフォルトの名無しさん
:02/05/13 10:33
俺は710じゃないが、コイツはシカトされたのか?
まっとうな答えだと思うが。
717
名前:
716
:02/05/13 10:47
スマソ、ポインタ無しで
>>712
で参照されてたのか
718
名前:
デフォルトの名無しさん
:02/05/14 10:37
>>632
コメントの色を赤にしなさい。
719
名前:
デフォルトの名無しさん
:02/05/14 10:52
Win2Kで「別のユーザとして実行」でexeを動かした時の、
「別のユーザ名」を取得したいのですが、何か良いAPIを知りませんか?
...別のユーザとしてプロセスを動かしているので、ログインしたユーザとは違いますよね?
ご存知の方、よろしくお願いします。
720
名前:
デフォルトの名無しさん
:02/05/14 10:58
WNetGetUser( NULL, )とかGetUserName()でなんとかなりませんか
721
名前:
デフォルトの名無しさん
:02/05/14 11:10
「ハンドル」という概念が良くわかりません。
アドレス(ポインタ)のようなものですか?
722
名前:
719
:02/05/14 11:25
>>720
サソ
動かしてるEXEの中で呼ぶんだから、
GetUserName()で動かしたユーザ名が取れますね...
思い切りボケてました(^^;
723
名前:
デフォルトの名無しさん
:02/05/14 13:20
キタ━━(゚∀゚)━━ァ!
最近、本格的にWindowsプログラミングでGUI系のやり始めたけど・・
コンソールじゃできないことがイパーイできるじゃんかYO
アイデアがモリモリキター
724
名前:
デフォルトの名無しさん
:02/05/14 14:14
>>723
たとえば?
725
名前:
デフォルトの名無しさん
:02/05/14 15:28
...Win2Kなんですけど、
自分がどのユーザグループに所属しているのかを取得するAPIを知りませんか?
726
名前:
_
:02/05/14 15:40
VBでエクスプローラのファイルリストビューの内容を取得するプログラムを作ろうとしています。
LVM_GETITEMTEXTメッセージを送るとエクスプローラがコケるんですが、何が悪いのでしょうか?
ソースはおよそ以下の通り。
LVITEM.mask = LVIF_TEXT
LVITEM.iItem = 1&
LVITEM.iSubItem = 0&
LVITEM.cchTextMax = 255&
LVITEM.pszText = String(.cchTextMax + 1&, vbNullChar)
Call SendMessage(ExplorerhWnd, LVM_GETITEMTEXT, 1&, LVITEM) '←ここでエクスローラがコケる
どなたかご存じの方、教えて頂きたく宜しくお願い致します。
727
名前:
デフォルトの名無しさん
:02/05/14 16:20
何故かLoadLibrary()が0x10000000を返します。
GetLastError()で調べてみると「ハンドルが無効です」と出ました。
DllMain()ではしっかりとTRUEを返してます。
もちろんDLLもプロジェクトと同じフォルダに入っております。
この問題の原因はどういった事が真っ先に考えられますか?
728
名前:
デフォルトの名無しさん
◆E12W1IlM
:02/05/14 16:33
パスの区切りが\\でなく\になってるってことはない?
729
名前:
デフォルトの名無しさん
:02/05/14 16:51
>>725
NetUserGetLocalGroups
730
名前:
727
:02/05/14 16:55
>>728
いえ、なってません。パスを間違えるとGetLastErrorは「指定されたモジュールが見つかりませんでした」と
言ってきます。ちなみにDLLの関数を一回だけ呼ぶ、というテスト的なプログラムで
妙なコードは一切無いです。DLLの方も小さい関数が3つほどあるだけなんですが・・・。
731
名前:
デフォルトの名無しさん
:02/05/14 16:58
LoadLibraryの戻り値の0x10000000って有効じゃないの?
732
名前:
デフォルトの名無しさん
:02/05/14 17:03
LoadLibraryで戻ってくるのはHINSTANCEと言うオチ
733
名前:
_
:02/05/14 17:07
>>727
>>730
LoadLibraryの戻り値はモジュールのハンドルなのでそれで良いと思われ。
エラーの時は0が返るはず。
734
名前:
727
:02/05/14 17:08
>>731
GetProcAddressで使うとNULLが返ってくるんです。
735
名前:
デフォルトの名無しさん
:02/05/14 17:10
>>734
コード出せ。おじさんがみてあげよう。
736
名前:
デフォルトの名無しさん
:02/05/14 17:26
ゲトProcAddrへの関数名数がちがうとか、
名前が修飾されている罠。
737
名前:
727
:02/05/14 17:33
>>735
どうも、助かります。
HINSTANCE hInstDll;
void (*hoge)(char*, ...);
DWORD ec;
hInstDll = LoadLibrary("DLL\\TEST.dll");
ec = GetLastError();
hoge = (void (*)(char*, ...))GetProcAddress(hInstDll, "test_func");
//(*hoge)("テストです、押忍。");
738
名前:
デフォルトの名無しさん
:02/05/14 17:47
>>737
関数名の修飾はどうなってるんでしょう?
739
名前:
デフォルトの名無しさん
:02/05/14 17:56
Test.dllのdefファイル大丈夫?
てかdll側の問題と思われ。
740
名前:
デフォルトの名無しさん
:02/05/14 18:01
GetLastErrorの位置がなんかおかしいような。
741
名前:
727
:02/05/14 18:40
#define EXPORT __declspec(dllexport)
#include <windows.h>
#include <stdio.h>
//お知らせ風メッセージボックスを出す。
EXPORT void test_func(char* message, ...)
{
va_list list_ptr;
char buf[200];
va_start(list_ptr, message);
vsprintf(buf, message, list_ptr);
va_end(list_ptr);
MessageBox(hwnd, buf, "お知らせ", MB_ICONINFORMATION);
return;
}
TEST.DLLのtest_funcの実装と、それに必要なコードです。hwndはグローバル変数です。
ちなみにこのDLL、インポートライブラリを通してならば問題なく使えますが、これは何かのヒントになりますか?
742
名前:
727
:02/05/14 18:45
>>738-739
すいません、質問の意味がよくわからないので今調べているところです。
743
名前:
デフォルトの名無しさん
:02/05/14 19:00
DEFファイルない?
そらエクスポートできん。
744
名前:
デフォルトの名無しさん
:02/05/14 19:08
dumpbin /exports dll\test.dll
の結果は?
745
名前:
743
:02/05/14 19:18
スマソ
__declspec(dllexport)あるからdefファイルいらん。
746
名前:
デフォルトの名無しさん
:02/05/14 20:12
C++の名前修飾されてるんじゃないの?
747
名前:
727
:02/05/14 21:31
修飾に関するレスが多いので色々調べてみた結果、エクスポートする関数に extern "C" を加えたらうまくいきました。
皆様、ありがとうございました。
つまり、C++の決まりに従ってDLLにある test_func() は void_test_func_char() のように飾られて
しまっているので GetProcAddress()で "test_func" を指定しても見つかりっこねえやってこったと解釈したんですが
よろしいでしょうか。
748
名前:
デフォルトの名無しさん
:02/05/14 21:33
>>747
コンパイラが都合の良いように名前変えちゃうのよね。
749
名前:
デフォルトの名無しさん
:02/05/14 21:41
>>747
その解釈であってるよ
750
名前:
デフォルトの名無しさん
:02/05/15 01:23
良スレな感じ。マターリ
■過去ログ置き場に戻る■
1-
前250
次250
最新50
DAT2HTML
0.33f Converted.