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


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

Win32API質問箱 Build25
501 名前:デフォルトの名無しさん :04/12/12 11:22:43
>499
え?パケットキャプチャーでAPI関数の名前が分かるんですか?

502 名前:デフォルトの名無しさん :04/12/12 11:29:20
>>501
分からない。
デバッガか逆アセンブラを使うとよい。
デバッガではOllyDBGがオススメ。
逆アセンブラではdiswinやdispeが主流。
どれもフリーソフトなので試してみれ。

ま、APIの名前が知りたいだけならメモ帳で開いたら分かるけど。

503 名前:デフォルトの名無しさん :04/12/12 11:30:50
最近のパケットキャプチャーは使ってる API まで表示してくれるのか、すげーな。

>>497
とりあえず、nbtstat.exe の中からそれっぽい文字列をひらってみた。

WSOCK32.dll ws2_32.DLL MSWSOCK.DLL USER32.dll ntdll.dll MSVCRT.dll ADVAPI32.dll KERNEL32.dll
HrLanConnectionNameFromGuidOrPath netman.dll system\currentcontrolset\services\netbt\parameters
\Device\NetBt_Wins_Export WSOCK32.dll OemToCharBuffA USER32.dll vsprintf NtClose sprintf atoi
isprint memmove RtlUpcaseUnicodeStringToOemString RtlInitUnicodeString RtlFreeAnsiString strncpy
RtlUnicodeStringToAnsiString RtlFreeUnicodeString NtCreateFile RtlAnsiStringToUnicodeString
RtlInitString NtWaitForSingleObject NtDeviceIoControlFile RtlExtendedLargeIntegerDivide ntdll.dll
exit _write _exit _XcptFilter __p___initenv __getmainargs _initterm __setusermatherr _adjust_fdiv
__p__commode __p__fmode __set_app_type _except_handler3 MSVCRT.dll _controlfp RegCloseKey
RegQueryValueExA RegOpenKeyExA ADVAPI32.dll WideCharToMultiByte MultiByteToWideChar
Sleep GetProcAddress LoadLibraryA FreeLibrary LocalFree LocalAlloc FormatMessageA
KERNEL32.dll CharToOemBuffA exe\nbtstat.dbg

504 名前:デフォルトの名無しさん :04/12/12 11:32:17
>>500
他のPCのOSの種類とユーザー名を
取得しようと思ってるのですが、
APIがまだ見つかりません・・・

505 名前:デフォルトの名無しさん :04/12/12 13:02:49
ネーヨ。
そんなもん。

506 名前:デフォルトの名無しさん :04/12/12 13:07:34
(´゚c_,゚` )まぁまぁ

507 名前:デフォルトの名無しさん :04/12/12 13:10:26
今gtk+で音声を再生させるプログラムを作成してるとこなんですけど、わかる人がいたら教えてください。フローチャートでできるだけわかりやすく書いてくれたらありがたいです。

508 名前:デフォルトの名無しさん :04/12/12 13:19:25
PlaySound()というAPIを一回呼ぶだけでOK

509 名前:デフォルトの名無しさん :04/12/12 13:29:39
>>507
>フローチャートでできるだけわかりやすく
殺意がわいたw

510 名前:デフォルトの名無しさん :04/12/12 13:41:34
>509
理由は?フローチャートで分かりやすくよろしく。

511 名前:デフォルトの名無しさん :04/12/12 14:29:31
まず本人がフローチャートで回答用テンプレを用意すべきだな

512 名前:デフォルトの名無しさん :04/12/12 14:51:20

┌───┴──┐
│PlaySound ( ) │
└───┬──┘


513 名前:デフォルトの名無しさん :04/12/12 14:52:33
釣られすぎだゾ

514 名前:デフォルトの名無しさん :04/12/12 15:19:26
>>497
デペンデンシーウォカーでも

515 名前:497 :04/12/12 15:31:33
>>514
それは何でしょうか?

初心者なんで変な質問してしまいすいません。
ただたんにネットワーク上の他端末の端末名やワークグループ名を
取得したいのですけどnbtstatコマンド以外で
可能なのか知りたいのです。


516 名前:デフォルトの名無しさん :04/12/12 15:39:13
>>515
どんなDLLに依存(ディペンデント)しているか見るツール。

517 名前:デフォルトの名無しさん :04/12/12 15:40:43
http://www.dependencywalker.com/

518 名前:デフォルトの名無しさん :04/12/12 15:43:12
なんでdependsを真っ先に挙げないのか不思議なスレですね。

Windowsのリソースキットに、プロセスが呼び出しているAPIを調べるツールがあります。

519 名前:デフォルトの名無しさん :04/12/12 15:43:39
>>516
なんでそんな無駄にスレが伸びそうな教え方するんだ。

520 名前:デフォルトの名無しさん :04/12/12 16:01:14
アプリケーションが外部DLLのどんな関数に動的リンクしているか調べるツール
これでnbtstatを調べれば、nbtstatがどんなAPIを使用しているかすぐにわかる

521 名前:VC++ :04/12/12 16:35:46
現在、VBでEXEを作成し、VC++でVBEXE用のDLLを作成。
そのDLLの中で画面の物理的なサイズを取得しようとしたのですが画面の解像度を変更するたびに物理サイズもそれに伴い色々変わってしまいます。
私が考えていた結果では解像度に関係なく物理サイズは同じ結果となるはず・・・。
私の使い方が悪いのでしょうか?
どなたか教えていただけないでしょうか?
 <コーディング>
    w_hdc = CreateIC("DISPLAY", NULL, NULL, NULL);
    w_ret = GetDeviceCaps(w_hdc, HORZSIZE);


522 名前:デフォルトの名無しさん :04/12/12 16:37:00
>>521
>私が考えていた結果では解像度に関係なく物理サイズは同じ結果となるはず・・・。

ならない。
以上。

523 名前:VC++ :04/12/12 16:37:04
現在、VBでEXEを作成し、VC++でVBEXE用のDLLを作成。
そのDLLの中で画面の物理的なサイズを取得しようとしたのですが画面の解像度を変更するたびに物理サイズもそれに伴い色々変わってしまいます。
私が考えていた結果では解像度に関係なく物理サイズは同じ結果となるはず・・・。
私の使い方が悪いのでしょうか?
どなたか教えていただけないでしょうか?
 <コーディング>
    w_hdc = CreateIC("DISPLAY", NULL, NULL, NULL);
    w_ret = GetDeviceCaps(w_hdc, HORZSIZE);


524 名前:VC++ :04/12/12 16:40:39
>>522
インチ当たりのピクセル数から割り出す方法を使うのでしょうか?
もっと簡単な方法は無いのでしょうか?
知っていたら教えていただけないでしょうか?

525 名前:デフォルトの名無しさん :04/12/12 17:11:04
>>515
> ただたんにネットワーク上の他端末の端末名やワークグループ名を
> 取得したいのですけどnbtstatコマンド以外で

何がしたいのか今ひとつ掴めないがnet view 相当でよければ
WNetEnumResource あたりとか。

526 名前:デフォルトの名無しさん :04/12/12 17:16:57
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpnetmg/html/_win32_netgetdcname.asp

527 名前:デフォルトの名無しさん :04/12/12 17:18:27
Comctl32.dllやcommctrl.hなどの最新のものはどこからダウンロードできるのでしょうか?
Microsoftのサイトをかなり探したのですが、どれをインストールしても更新されませんでした。

528 名前:デフォルトの名無しさん :04/12/12 17:46:45
>>527
Comctl32.dllは最新のIEやそのパッチをあてればいい。
commctrl.hは>>2のPlatform SDKから

529 名前:デフォルトの名無しさん :04/12/12 17:47:40
>>528
ありがとうございます
早速いってみます

530 名前:デフォルトの名無しさん :04/12/12 17:48:05
>524
1ピクセルの物理的な寸法を得る手段がないので
あきらめるしか無いヌー

あるいは、ユーザーに「ディスプレイの正確なdpiを計測してください」と頼むか。

531 名前:デフォルトの名無しさん :04/12/12 18:08:34
>>530
アプリごとに実装してたらスーパー馬鹿野郎だな
そーゆーのはOSが持つべき機能

532 名前:デフォルトの名無しさん :04/12/12 18:32:21
>531
穏やかに行こうぜ。

533 名前:デフォルトの名無しさん :04/12/12 18:48:36
すいません、もう一つだけ質問させてください
Platform SDKをダウンロードして
Program FilesフォルダにMicrosoft SDKがフォルダが出来たのですが、
この中身のLib、includeを全て適当にコピーして使ってもいいものなのでしょうか?
何か正しい使い方がありましたら教えていただけませんか?

534 名前:デフォルトの名無しさん :04/12/12 18:58:55
>>533
コピーするのではなく、インクルードファイルのディレクトリ設定や
ライブラリファイルのディレクトリ設定を追加するほうがいい。
既存のディレクトリよりも優先されるように順番に注意すること。

535 名前:デフォルトの名無しさん :04/12/12 19:14:02
>>534
分かりました、本当にありがとうございました

536 名前:デフォルトの名無しさん :04/12/12 19:15:46
教えてください.

プログラムが実際に消費した時間を計測したいです.
今のところ GetProcessTimes() や GetThreadTimes() を使って
ますが,Win95系のバージョンでは使えないので困ってます.

よろしくお願いします.

537 名前:デフォルトの名無しさん :04/12/12 19:34:04
>536
「実際に消費」というのはもっと具体的に言うとどういうこと?
実際にかかった時間のこと?

538 名前:デフォルトの名無しさん :04/12/12 19:40:39
>> 537
実際に CPU を使用して計算した時間を知りたいです.
いわゆる elapsed time のほうではないっす.


539 名前:デフォルトの名無しさん :04/12/12 19:44:43
BCCで簡単な画像編集アプリを作りたいんですが
一般的なキャンバスの仕組みが分かりません。
灰色の背景に白地のキャンバスエリアだとして、ただ白の短形を描画して
その上から線を引くとしたら白の短形を再描画した時消えるし
どう作ればいいのでしょうか?
保存する時はクライアントエリア上に直接描かれた絵を1ピクセルずつ色を
キャプチャして保存するような感じでいいのですか?
リンク探しても、それっぽい内容が見当たりません。
どなたか教えてください。

540 名前:デフォルトの名無しさん :04/12/12 19:48:16
たんけい選択

541 名前:デフォルトの名無しさん :04/12/12 19:54:55
短形

542 名前:デフォルトの名無しさん :04/12/12 19:56:10
たんけいコピー

543 名前:デフォルトの名無しさん :04/12/12 19:56:30
短茎

544 名前:デフォルトの名無しさん :04/12/12 19:58:37
マジワロタ

545 名前:デフォルトの名無しさん :04/12/12 20:00:36
ググったら結構見つかったよ、短形(w

546 名前:デフォルトの名無しさん :04/12/12 20:00:53
(・∀・)タンケイ!

547 名前:デフォルトの名無しさん :04/12/12 20:05:37
>>539
ダブルバッファリング

548 名前:VC++ :04/12/12 20:27:57
>>530
おっしゃる通りみたいでした。
dpiから画面の物理サイズを計測してみたんですが、やはり同じでした・・・。
実際のサイズを知る手段が無いみたいですね。
ありがとうございました。

549 名前:デフォルトの名無しさん :04/12/12 20:38:07
巨と豆の区別もつかないらしい

550 名前:デフォルトの名無しさん :04/12/12 20:41:40
ホントにたんけいだと思ってる奴は俺の周りにも
結構いる。仕方ないよ。

551 名前:デフォルトの名無しさん :04/12/12 20:46:15
巨乳と豆乳の区別はつくぞ。

552 名前:デフォルトの名無しさん :04/12/12 20:47:12
∩(・ω・ )∩ 短形 ばんじゃーい

553 名前:539 :04/12/12 20:55:30
あれ? 四角形って短形って言わんのか(;´Д`)

>547
ググったけどよく分かりません。「ちらつきをなくす効果」ですよね?
白地に線を引く(Ellipseなどでマウスクリックで描画し続ける)としたら
白を再描画するとクリックした位置はユーザー任意なので線が消えてしまうって事なんですけど。
位置を記録したとしても、描くほど動作が不安定になりそうだし。

554 名前:デフォルトの名無しさん :04/12/12 21:00:57
市販のライブラリでも使っとけ。

で、四角形は矩形(くけい)だ。

555 名前:デフォルトの名無しさん :04/12/12 21:09:14
>553
>あれ? 四角形って短形って言わんのか(;´Д`)
どんまい。俺も最初読めなかったよ。
学校で習わないもんな。

556 名前:デフォルトの名無しさん :04/12/12 21:14:14
>>553
信じられん。コメントのしようがない

557 名前:デフォルトの名無しさん :04/12/12 21:22:32
>>553
CreateCompatibleDC

558 名前:デフォルトの名無しさん :04/12/12 21:29:56
>>553
線を追加するたびに、キャンバスのイメージを
バッファ(HBITMAP)に保存しといて、
WM_PAINTが来たときには、バッファの内容を描画する。

559 名前:539 :04/12/12 21:38:18
>554 ドウモゴシンセツニ。
>555 もう短形でもいいじゃん。
>556 してるじゃん。
>557-558
ありがとうございます。
理屈は何となく理解できました。

560 名前:デフォルトの名無しさん :04/12/12 21:47:10
>>551
何となく頷いてしまった。君は鋭いね。

561 名前:297 :04/12/12 22:06:20
BCCを使っています
SendInputとかの関数の中身(どうコーディングされているか)を見たいのですが、
WinAPIを使うときにインクルードしているファイルを見ても
SendInput(
IN UINT cInputs, // number of input in the array
IN LPINPUT pInputs, // array of inputs
IN int cbSize); // sizeof(INPUT)
としかなっていませんが、実際の動作はCではコーディングされてないのでしょうか?
どんな動作をしているのか見たいのですが、そのような時はどういう風に調べれば
よいのでしょうか
ヒントだけでもいいので教えてください
検索方法が悪いのか、たいした情報が出てきません・・・

562 名前:デフォルトの名無しさん :04/12/12 22:06:58
申し訳ありません、名前欄は無視してください (;´Д`)

563 名前:デフォルトの名無しさん :04/12/12 22:11:15
>>561
好きなの選べ。

・インターフェイスと動作が分かれば十分。MSDNで調べる。
・あきらめる。
・MSとNDA結んでソース見せてもらう。
・リバースエンジニアリングしてもいい国に行く。
・Wineみたいな互換ライブラリの実装から類推する。

564 名前:デフォルトの名無しさん :04/12/12 22:12:10
>>561
実際のコードは%WINDIR%\SYSTEMの中にDLLとして収められている。
(MSDNのSendInputの項を見ると「インポートライブラリ:user32.lib を使用」と書いてあるのでSendInputはUser32.dllにある)
当然Cのソースコードとして読むことは不可能。
せいぜい逆アセンブルするまでしかできない。

565 名前:563 :04/12/12 22:27:47
すいません。どうかしてました。訂正します。

私の拙い知識で思いつく限りでは、以下の方法が考えられます。

・インターフェイスと動作が分かれば十分。MSDNで調べる。
・あきらめる。
・MSとNDA結んでソース見せてもらう。
・リバースエンジニアリングしてもいい国に行く。
・Wineみたいな互換ライブラリの実装から類推する。



566 名前:497 :04/12/12 22:59:39
教えていただいたツールを使って
NBTSTATを解析して調査してみます。
すごく・・・便利なルーツですね。

567 名前:デフォルトの名無しさん :04/12/12 23:05:57
ここはマ板じゃないんだけどなぁ・・・ネタは程々に。

568 名前:デフォルトの名無しさん :04/12/12 23:11:32
>566
ルーツ?

569 名前:デフォルトの名無しさん :04/12/12 23:34:22
http://www.jti.co.jp/softdrink/product/roots/

570 名前:デフォルトの名無しさん :04/12/12 23:45:19
くんたきんて

571 名前:デフォルトの名無しさん :04/12/12 23:53:14
http://www.dependencywalker.com/

572 名前:デフォルトの名無しさん :04/12/12 23:58:38
>>497
なんか出遅れちゃったけど。。。
netstat を調べたいなら、同様のフリーウェアをあたるのが一番。
ttp://www.sysinternals.com/ntw2k/source/tcpview.shtml
ソースつき。

573 名前:デフォルトの名無しさん :04/12/13 00:06:05
netstat ≠ nbtstat

574 名前:497 :04/12/13 00:18:49
みなさん、いろいろすいませんね。

自分の組織にあったネットワーク管理ツールを作ってまして
VC言語の作り方忘れたので、VB6でAPI使ってます。
マルチプロセスで動かすのでちゃんと動くか怖いですけどね。

575 名前:デフォルトの名無しさん :04/12/13 00:34:40
http://leaf.aquaplus.co.jp/product/rts.htm

576 名前:デフォルトの名無しさん :04/12/13 00:38:45
>>574
作るまでもないだろ

577 名前:デフォルトの名無しさん :04/12/13 00:57:15
C++板で質問しましたら誘導されたのでここで質問させてください。
http://pc5.2ch.net/test/read.cgi/tech/1101473340/359-360

内容は
>wmpの視覚エフェクトを自分で作っているのですが、
>現在再生中のファイル名と
>再生した経過時間を取得するにはどうすればいいでしょうか。。
>
>板違いだと思うのですが、どこで聞いてよいか分からなくて、、、
>どなたかご教授ください。

578 名前:497 :04/12/13 01:00:09
うちの組織にあったDBで管理できるものもないし、
自分の勉強の為ででもあります。


579 名前:デフォルトの名無しさん :04/12/13 01:48:10
自分が食ってるメモリを取得する方法はあるかね

580 名前:デフォルトの名無しさん :04/12/13 02:26:30
>>577
DirectShow使ってる?もしそうなら↓へ。
DirectShowと戦うスレ
http://pc5.2ch.net/test/read.cgi/tech/1026666092/

581 名前:デフォルトの名無しさん :04/12/13 04:20:42
>>563-564
レスありがとうございます
良くわかりました
Wineっていうのを調べてみます
ありがとうございました

582 名前:デフォルトの名無しさん :04/12/13 07:12:02
ShellExecuteとCreateProcessを使って
他のプログラムを起動しているのですが、
メモ帳が「notepad」で開けるのですがこれは何故でしょうか?
IEをプログラムの名前だけで開きたいのですがどうすればいいでしょうか?

583 名前:デフォルトの名無しさん :04/12/13 07:13:53
>582
パスが通ってるから。

584 名前:デフォルトの名無しさん :04/12/13 07:36:03
>>583
それはどこかに定義してあるのでしょうか?
また、IEの場合はなんといれればよいのでしょうか?

585 名前:デフォルトの名無しさん :04/12/13 08:35:07
>>579
GlobalMemoryStatus(Ex)

586 名前:デフォルトの名無しさん :04/12/13 08:41:59
>>584
iexplore

587 名前:デフォルトの名無しさん :04/12/13 11:41:38
EnumWindowsをコールして、コールバック関数内では
GetWindowThreadProcessIdを使ってプロセスIDを求めたいんだけど、
なぜかGetWindowThreadProcessIdで異常終了してしまう

OSはWindows2000
心当たりある人いませんか?

588 名前:デフォルトの名無しさん :04/12/13 11:48:10
_beginthread(あるいは_beginthreadex)が返すハンドルに対して
SuspendThreadやResumeThreadを使うのはOKなんですか?
一応期待した挙動はしているみたいなんですが、
MSDNにはそれらしい記述が見つからないので教えてプリーズ。

589 名前:デフォルトの名無しさん :04/12/13 11:52:01
>>588
ソース読んでみたら?

590 名前:デフォルトの名無しさん :04/12/13 12:12:09
>>588
ex 付きの方は OK。

591 名前:デフォルトの名無しさん :04/12/13 12:17:13
C ランタイム ライブラリのデータ構造体へアクセス中のスレッドがあって、
それの完了を待っている複数のスレッドが存在する場合に SuspendThread を使うと、
デッドロック状態になります。

592 名前:デフォルトの名無しさん :04/12/13 13:30:34
>>591
_beginthreadexの方でも?
解決する方法はありますか?
C ランタイム ライブラリを呼ばないとか呼ぶときは排他制御するとかの泥臭い方法しかないですか?

593 名前:デフォルトの名無しさん :04/12/13 13:46:28
>>592
ISBN4-7561-1404-0
198ページ

594 名前:デフォルトの名無しさん :04/12/13 13:51:15
>>593
高いよ。

595 名前:デフォルトの名無しさん :04/12/13 13:54:02
>>592
スレッド管理する場合は、
もっと大きめの単位で待ち合わせとかするのが普通のような気が。
先方が何してるんだかわからない状況で SuspendThread は乱暴・・・
というかそんなパターンあまり便う場面なくない?

596 名前:デフォルトの名無しさん :04/12/13 13:54:21
そもそも SuspendThread() 自体が、よほどのことがない限り使っては
いけない API です。使いこなすのは難しい。



597 名前:デフォルトの名無しさん :04/12/13 14:05:56
>>>596
確かに。自分自身をSuspendThreadするってケースでしか使わないなぁ・・・

598 名前:デフォルトの名無しさん :04/12/13 15:00:40
>>587
ソース見せて。
CALLBACK キーワードがついてないとか?

599 名前:デフォルトの名無しさん :04/12/13 20:58:08
VB6.0で作った画面からVC6.0で作ったDLLを呼び出す際、
引数にVBの関数のポインタを渡し、DLLからそれを
コールするような処理を書いてみました。

問題なくコールできたのですが、DLL内でスレッドを生成し、
そのスレッド内からコールすると、「ハンドルできない例外」が
発生してしまいます。このような呼び出し方はやっては
いけないことなのでしょうか。

600 名前:デフォルトの名無しさん :04/12/13 20:58:50
>599
ちなみにデバッグで起動すると問題ないのですが、
VBでexeを作って起動すると失敗します。

601 名前:デフォルトの名無しさん :04/12/13 21:00:50
>599-600
すいません。勢い余ってここに投稿してしまいましたが、
よく考えたらスレ違いでした。>599-600は取り下げ
させてください。VBスレの方で質問しなおします。

602 名前:デフォルトの名無しさん :04/12/13 21:05:34
DLLで生成したスレッドから何をコールしたんだろう(´Д`;)
VBスレのほうではちゃんと質問内容を明確にしてね

603 名前:デフォルトの名無しさん :04/12/13 21:06:44
VBの関数かorz

604 名前:69式フリーPG ◆hND3Lufios :04/12/13 21:14:42
VB6はSTAなんだな。

605 名前:デフォルトの名無しさん :04/12/14 01:30:41
>>586
それでやったんですができませんでした。
ファイル名を指定して実行するウィンドウではそれで起動できるのですが、
ShellExecuteやCreateProcessだと起動しませんでした。

606 名前:デフォルトの名無しさん :04/12/14 02:24:44
CLSIDを"CLSID_InternetExplorer"に指定して
CoCreateInstance()を呼べばいいと思う。

607 名前:デフォルトの名無しさん :04/12/14 03:20:26
QueryPerformanceCounterについて教えてください。

Googleで検索すると、さも当たり前に使うAPIのように紹介されていますが、
MSDNライブラリの注意書にあるとおり、私のPCではサポートされていませんでした。

これが普通に使える方、どんなハードウェアを使っているのか教えてください。

608 名前:デフォルトの名無しさん :04/12/14 03:25:40
インストールされているハードウェアが高分解能パフォーマンスカウンタをサポートしている場合は、 TRUEを返します。それ以外の場合は、 FALSEを返します。拡張エラー情報を取得するには、 GetLastError関数を使います。


609 名前:デフォルトの名無しさん :04/12/14 03:42:14
>>607
RDTSC命令が使えるCPU(Pentium以降)なら大丈夫らしい
ttp://yosirin9.hp.infoseek.co.jp/tips/no1/tips_no1.htm


610 名前:デフォルトの名無しさん :04/12/14 08:48:52
サービスのことで質問があります。
メモリマップドファイルでユーザー権限で動いているEXEと通信しようとしてるのですが、
MapOfViewの段階で失敗します。
両方とも通常のアプリなら問題は発生しません。
環境はW2kPro+VS.NET2003、サービスはATLウィザードで作ったものほぼそのままで、
メモリマップドファイルを作成するロジックのみを追加しています。
よろしくお願いします。

611 名前:デフォルトの名無しさん :04/12/14 09:13:31
>>607
QueryPerformanceCounterがサポートされていない>>607
ハードウェアも教えてほしい。

612 名前:デフォルトの名無しさん :04/12/14 10:39:05
>>611
3台試しました

1台目
CPU : AthlonMP (Palominoコア)
マザーボード: TYAN TigerMP (BIOS 1.05)
HALはACPIマルチプロセッサです

2台目
CPU : Pentium3 (Coppoermineコア)
マザーボード: 不明 hp Visualize X-CLASS
HALはACPIマルチプロセッサです

3台目
CPU : Pentium4 (Northwoodコア)
マザーボード: Intel D845GERG2-LK (BIOS P12 (RG84510A.86A.0022.P12.0211151511))
HALはACPIユニプロセッサです

RDTSC命令を直接叩いてみます。
デュアルのマシンはプロセッサのアフィニティを設定しないとヤバそうですね。

613 名前:デフォルトの名無しさん :04/12/14 10:42:25
彼は寝たっぽい

614 名前:デフォルトの名無しさん :04/12/14 15:57:28
>>612
コーディングが間違ってるって事はない?

615 名前:デフォルトの名無しさん :04/12/14 20:55:42
Windowを最初から最大化した状態で起動したいのですが、
SW_SHOWMAXIMIZEDを使わずにやる方法は無いでしょうか

SW_SHOWMAXIMIZEDだと、初期化前に表示しちゃうもんで…
SW_HIDEMAXIMIZEDなんてのがあれば良かったんですが

616 名前:デフォルトの名無しさん :04/12/14 21:26:03
>>615
初期化してからShowWindowすればいいじゃない

617 名前:デフォルトの名無しさん :04/12/14 21:45:30
>>616
それが、初期化の際、最大化した状態でのWindowの情報が色々欲しかったりで。
別に初期化前に見せてしまっても良いのですが、どうにも見栄えが悪いんですよね。

618 名前:デフォルトの名無しさん :04/12/14 21:55:49
>>617
サイズが必要な初期化は WM_SIZE でやればいいのでは?
(WM_SIZE は cx = cy = 0 で呼ばれることあるから注意)

619 名前:615=617 :04/12/14 22:29:40
すいません、次のようになっちゃうのがそもそもの悩みでして

初期化は絶対しなければなので初期化する
>初期化後に最大化
>WM_SIZEでまたサイズ変更処理(初期化の処理と一部かぶる)をしなければ

そんなわけで、上手く最大化して起動できれば二度やらずに
済むと思ったのですが、SW_SHOWMAXIMIZED以外には無さそうですね。

>>618
二度やるのが多少気持ちが悪い程度なので、それで行きたいと思います。
cx = cy = 0の件は初耳で全く考慮してなかったので、気をつけます。
616さん、618さん、レスありがとうございました。

620 名前:デフォルトの名無しさん :04/12/14 22:51:39
>>619
ValidateRectしてからSHOW_MAXMIZEDで誤魔化せない?

621 名前:デフォルトの名無しさん :04/12/14 22:54:02
フルパスをあるディレクトリを基準とする相対パスに変換するAPI
逆に基準ディレクトリと相対パスからフルパスを生成するAPIはないでしょうか。
例えば、c:\aaa\bbb\ccc.txt(フルパス) と c:\aaa\ddd\(基準) から ..\bbb\ccc.txt(相対パス)
とその逆の操作です。

622 名前:デフォルトの名無しさん :04/12/14 23:02:44
_beginthreadで作成したスレッドの中で、LIBCMT.LIBやMSVCRT.LIBを
リンクせずにCのランタイムライブラリを呼び出すのはNGでしょうか。

623 名前:デフォルトの名無しさん :04/12/14 23:13:13
>>620
レスありがとうございます
試して、さらにすぐ隠したりしてみたのですが、やはり表示されちゃうみたいです。

624 名前:デフォルトの名無しさん :04/12/14 23:32:24
>>622
> LIBCMT.LIBやMSVCRT.LIBを
> リンクせずにCのランタイムライブラリを呼び出すのは

どうやってやるんだ?

625 名前:デフォルトの名無しさん :04/12/14 23:32:45
>>621
Shell APIでよければ
PathRelativePathTo()
PathCanonicalize()
とか?
他にもPath〜()調べてごらん

626 名前:デフォルトの名無しさん :04/12/14 23:37:59
>624
え?普通に呼べましたよ。でもアウトプットウィンドウを見たら、
MSVCRT.LIBはロードされていました。

627 名前:デフォルトの名無しさん :04/12/14 23:44:29
>>626
リンクせずにって書いたんじゃないのかよ。
で、結局リンクされてたら世話ないわ。

628 名前:デフォルトの名無しさん :04/12/15 00:15:50
>>623
WS_MAXIMIZED

629 名前:デフォルトの名無しさん :04/12/15 00:23:49
>627
すいません。「リンクせずに」と書いたのは、
プロジェクト→設定→リンク→オブジェクト/ライブラリモジュールに
明示的に指定せずに、ということでした。
「デフォルトライブラリを全て無視」のチェックは付けて
なかったのでリンクされたんですかね。

630 名前:デフォルトの名無しさん :04/12/15 00:24:37
>>627
普通にLIBC.LIBをリンクすりゃできるだろうが。

631 名前:デフォルトの名無しさん :04/12/15 00:34:16
>>628
否定的な事ばかり言ってすいません。
しかしこのWS_MAXIMIZEがどうにも効かなくて困ったのがそもそもの始まりでした。

検索したところ、MDIの子ウィンドウにのみ意味があるという記述があって
早々に諦めてしまったのですが、なにか私が大ポカをやらかしている気もします。

WS_MAXIMIZEで普通に最大化起動できるよ?みたいなレスを頂ければ幸いです。

632 名前:デフォルトの名無しさん :04/12/15 00:43:09
>>631
その後表示するときShowWindowに渡してるフラグは?

633 名前:デフォルトの名無しさん :04/12/15 00:43:15
LIBCMT.LIBリンクしないと_beginthreadは使えないんではなかろか

634 名前:デフォルトの名無しさん :04/12/15 00:49:39
>>632
なるほどー!そういう事でしたか。
WS_MAXIMIZEの時は、起動時の引数をそのまま渡していました。

WS_MAXIMIZEで作成すれば、ShowWindowの前にちゃんと、最大化されたWindowの情報拾えますね。
お恥ずかしい限りです。しかしすっかり諦めていた所なので本当に嬉しいです。
ありがとうございました。

635 名前:621 :04/12/15 01:13:15
>>625
ありがとう。それでいけそうdeath。

636 名前:607 :04/12/15 01:43:46
CPUのパフォーマンスカウンタの件、アドバイスありがとうございます。

諦めて消したコードを書き直してみたら、値を取得することができました。
いったい何が原因だったのか、わからずです。

QueryPerformanceCounterを呼ぶと1000クロックくらい経過してしまうので、
RDTSC命令を直接呼ぶことにしました。これだとオーバーヘッドは60クロックくらいで済みました。

お騒がせしてすみませんでした。

637 名前:デフォルトの名無しさん :04/12/15 07:23:54
>633
すまん。出直してくる。

638 名前:デフォルトの名無しさん :04/12/15 10:51:33
 VC++でコンソールを扱うクラスを作ろうとしているのですが,
コンソールのハンドラルーチンがうまくクラス化できなくて悩んでいます.
 SetConsoleCtrlHandlerでハンドラを設定するのですが,
スタティックな関数しか指定できません.
 そこで,ウィンドウやスレッドのサブクラス化でやられるようにコンソールクラスの
thisを隠しておいてジャンプさせようとしたのですが,
SetConsoleHandlerの引数は関数のアドレスとハンドラを追加するか削除するかのブール値の二つ,
HandlerRoutineに渡されるのは信号の種類を表すDWORD値一つだけで,
このthisを隠しておく場所が見当たらないのです.
 良い方法がありましたらお願いします.

639 名前:デフォルトの名無しさん :04/12/15 11:12:51
>>638
サンクとか。
ATLのCWindowImplとか参考になるかも。

640 名前:デフォルトの名無しさん :04/12/15 11:24:14
DATETIMEPICKERコントロールからのデータの取得は
GetWindowTextで取得できたのですが、
データの設定がSetWindowTextで出来ません
何か固定のデータ形式か専用の別の設定する関数があるのでしょうか?
テキストは"2004/12/15"という感じで設定しようとしたのですが、ダメでした

641 名前:デフォルトの名無しさん :04/12/15 11:31:44
>>638
DWORD 値から、インスタンスのポインタとメンバ関数ポインタの組 or boost::function へのmapを
持てばいいんじゃない?

642 名前:638 :04/12/15 11:49:36
>>639
すばやいご返事ありがとうございます.
ちょっと調べてみたところ,
サンクはWOW系の16bitのアプリケーションを32bit環境で動かすためのAPIということで
今回の,自分の目的にあうものではないようです.
ATLは結構複雑なもののようですが,かなり参考になりそうなので見てみようと思います.
ザッと見た感じだと,thisをグローバルなマップに登録しておいてそこから引いてくるようなイメージでしょうか.

プログラムは殆ど初心者でして,
コンソールで動くゲーム(NetHackみたいなキャラクタベース)を作ろうとしているのですが,
それだけの事でも大変苦労してしまいます.

勉強の糸口を頂き,ありがとうございました.


643 名前:638 :04/12/15 12:02:39
>>641
DWORD値とメンバ関数へのポインタのマップもスタティックに持っておいて,
ハンドラルーチンの中からそれを呼ぶということですね.
これから書いてみますが,うまく行きそうです.

皆さん,ありがとうございました.

644 名前:デフォルトの名無しさん :04/12/15 13:42:36
>>642
そういう意味のサンクではなかったのだが。
指定したthisでメンバ関数を呼ぶような関数を動的に作成するという感じ。

645 名前:デフォルトの名無しさん :04/12/15 15:15:54
やりたいこと:特定のアプリが起動中か確認したい
環境:2003Server + MetaFrame VB.NET

他社のアプリケーションがサーバ上で起動中か確認したいんですが、 MetaFrameを使って
サーバのプロセスを取得すればいいと考えました。

1.Processクラスを使用する
 →admin権限を持ったユーザしか取得が出来ない。MetaFrameを使用するユーザにAdmin権限は
   持たせられない為×

2..psapi.dllでEnumProcessesを使用する
  →VB6からの移行はOK。しかしカレントユーザのプロセスしか取得できない。
    すべてのプロセスを取得しないと確認の意味がない。

3.Kernel.dllでCreateToolhelp32Snapshotを使用する
  →VB6での確認は出来たが、.NETへの移行がうまく出来ない。
    スナップショットの取得はできるが、次のProcess32Firstで必ず0が帰ってきてエラー。

3が実現しやすいのかと思っています。
サンプルは http://vbvbvb.com/jp/gtips/1101/gCreateToolhelp32SnapshotTh32csSnapprocess.html
を利用しています。


646 名前:645 :04/12/15 15:20:30
構造体は
Public Structure PROCESSENTRY32
Public dwSize As Integer
Public cntUsage As Integer
Public th32ProcessID As Integer
Public th32DefaultHeapID As Integer
Public th32ModuleID As Integer
Public cntThreads As Integer
Public th32ParentProcessID As Integer
Public pcPriClassBase As Integer
Public dwFlags As Integer
Public szExeFile() As Byte
End Structure

lngProcessSnapHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)

ReDim udtProcessEntry32.szExeFile(259)
Dim i As Integer
For i = 0 To 259
udtProcessEntry32.szExeFile(i) = 0
Next
udtProcessEntry32.dwSize = Len(udtProcessEntry32)

If Process32First(lngProcessSnapHandle, _
udtProcessEntry32) <> 0 Then

上のProcess32Firstで必ず0が帰ってきます。
長々と申し訳ありませんが、以上で状況はわかって頂けましたでしょうか?
助言をお願いします。

647 名前:デフォルトの名無しさん :04/12/15 15:47:19
>>646
VB.NETの問題のような気がするが。マーシャリングの基本とか。

・PROCESSENTRY32のszExeFileはStringで宣言。
 MarshalAsAttribute属性をつけて、UnmanagedType.ByValTStrとSizeConst=260を指定。

・dwSizeは、Marshal.SizeOf(udtProcessEntry32)で取得した値を設定する。

C#で同様にやった分には問題なかった。

648 名前:645 :04/12/15 16:43:39
647様、ありがとうございます。出来ました!!
出来たものの全く意味がわかりませんので、勉強してみます。
本当にありがとうございました。

649 名前:デフォルトの名無しさん :04/12/15 17:59:48
誰か>>640もお願いします
ネット上でかなり調べましたが分かりませんでした・・・

650 名前:デフォルトの名無しさん :04/12/15 18:08:30
DTM_SETSYSTEMTIME送れば?

651 名前:デフォルトの名無しさん :04/12/15 20:08:37
ものすごく巨大な(1000万行×10フィールド)くらいの
CSVファイルを特定のフィールドをキーにソートしろ
と言われたら、普通どんな感じでやりますか?

652 名前:デフォルトの名無しさん :04/12/15 20:13:01
>>651
俺なら数万行程度のブロックに分けてそれぞれをソートしてからマージソートだな。

653 名前:デフォルトの名無しさん :04/12/15 20:16:52
特定のフィールドと行数のペアを作ってソート。

654 名前:69式フリーPG ◆hND3Lufios :04/12/15 20:18:43
OracleかSQL鯖に食わせてSQL一発かけてCSV出力

655 名前:デフォルトの名無しさん :04/12/15 21:36:00
>653
アホ

656 名前:デフォルトの名無しさん :04/12/15 21:40:47
>>655
にんにく? いまバカの煮込みつくってます

657 名前:デフォルトの名無しさん :04/12/15 21:44:47
どーゆー意味?

658 名前:デフォルトの名無しさん :04/12/15 21:55:52
>>651
アルゴリズムを選びに行く前に、元データの傾向と対策をまず調べる

659 名前:デフォルトの名無しさん :04/12/15 21:59:27
>652
やっぱそれですかね。何かいいサンプルとか転がってないですか?

660 名前:デフォルトの名無しさん :04/12/15 22:55:34
Windowsのインデックスサービスの機能を呼び出すAPIって
ありますか?

661 名前:デフォルトの名無しさん :04/12/15 23:19:19
>>660
この辺かな。

Indexing Service Reference
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/indexsrv/html/ixref_6xid.asp

662 名前:デフォルトの名無しさん :04/12/15 23:26:16
>>657
そこもと蘭学の心得はおありかの

663 名前:デフォルトの名無しさん :04/12/15 23:47:35
CreateEventってどういうときに使うの?

664 名前:デフォルトの名無しさん :04/12/15 23:56:55
>>663
マルチスッドレのコードかいてて、スッドレ間の同期とるのに使う

665 名前:デフォルトの名無しさん :04/12/16 00:07:00
>>659
珠玉のプログラミング―本質を見抜いたアルゴリズムとデータ構造
ttp://www.amazon.co.jp/exec/obidos/ASIN/4894712369/250-8489478-2398654

666 名前:デフォルトの名無しさん :04/12/16 00:12:32
>665
おー、面白そうだな、これ。

667 名前:デフォルトの名無しさん :04/12/16 00:13:04
>664
どうもです。ボタンクリックとかメニュー選択とかのイベントとは
別物なんですね。

668 名前:デフォルトの名無しさん :04/12/16 00:20:58
win2000にて。
GetAdaptersInfoを呼び出し取得したIP_ADAPTER_INFOの
AdapterNameに対応したFriendlyNameを知るにはどうしたらよいのでしょうか?

XPならGetAdaptersAddressesのIP_ADAPTER_ADDRESSESで一撃なのですが、
2000だとiphlpapi.dllにGetAdaptersAddressesが入っていないので・・・

ご存知のかたがいらっしゃいましたら、教えてください。


669 名前:デフォルトの名無しさん :04/12/16 01:45:27
>>651
std::list<std::vector<std::string> > に格納して std::sort() が楽ちん。

670 名前:669 :04/12/16 01:48:24
std::sort()じゃなくて、listのメンバのsort() だった。 orz

671 名前:デフォルトの名無しさん :04/12/16 03:01:42
>>670
潤沢なメモリをお持ちのようで。
#1億個のstring…

672 名前:デフォルトの名無しさん :04/12/16 07:17:14
>671
>669みたいな何も考えてない奴ってかえって
ほほえましいよなw

673 名前:デフォルトの名無しさん :04/12/16 07:27:17
しかもstd::listのソートって激遅じゃん

674 名前:デフォルトの名無しさん :04/12/16 11:40:35
VB6.0、Win2000で動かしているプログラムを
VB4.0、Win95に置き換えないといけなくなってしまいました。
VB4.0、Win95での開発は経験がなく、
APIの本やネットで調べてみたのですが
サブネットマスクとデフォルトゲートウェイとワークグループ名を取得する方法がわかりません。
ご存知の方がいらっしゃれば教えていただけませんでしょうか?

675 名前:デフォルトの名無しさん :04/12/16 12:33:17
ある端末上で動作するWinサービス(SYSTEM権限で動作)で
ワークグループ上のサーバの共有ディレクトリから端末の
ローカルディレクトリにファイルをコピーしたいんだけど、
権限の問題で躓いています。ドメインは組んでいません。

サーバのディレクトリに対してアクセス権限があるユーザのIDとパスワードは
あるのですが、端末のシステムにそのユーザを作成しないでやりたいです。
ユーザ/パスワードを暗号化してレジストリに置いて使うのはOKです。

【やってみたこと】
1.SYSTEM権限のままコピーしようとすると権限エラーで失敗します。
  →サーバ側でNULLセッションとかいうのを許可にすればOK?

2.LogonUser→Impersonateだと、サーバの共有ディレクトリに
  アクセス権限のあるローカルユーザを作らないといけない。
  ユーザを作らないとLOGON32_LOGON_NETWORKでしか成功せず、コピー不可でした。
  ※LogonUserのネットワーク版みたいなの無いんでしょうか?

以上です。

動作予定環境はNT/2K/XPです。
宜しくお願いします。

676 名前:デフォルトの名無しさん :04/12/16 12:53:37
>>671->>672
貧乏人らが必死だな

677 名前:デフォルトの名無しさん :04/12/16 13:12:29
>>674
VB4で開発しないといけない理由は?
Win95でもVB6は動いたと思うが。
#メーカー保証のないOSでの開発はできないと突っぱねるのが正解。

678 名前:674 :04/12/16 13:21:17
>677
ユーザーに納入しているマシンのうち、
現在その環境で動いているマシンがありまして、
新マシン(Win2000 VB6.0)で新たに追加したプログラムと
同じものを旧マシン(WIn95 VB4.0)でも追加しないといけなくなったのです。

>#メーカー保証のないOSでの開発はできないと突っぱねるのが正解。
個人的にはそうしたいくらいです・・・。

679 名前:デフォルトの名無しさん :04/12/16 21:12:47
>>678
その場合、旧マシンのリプレイスを薦めるのが営業的にもいいかと。
つーか、VB6で開発したものをWin95で動かせばいいだけじゃないの?
#なんでVB4を使いたいのかが判らん。


680 名前:デフォルトの名無しさん :04/12/16 22:21:21
無線LANを使用するアプリを作っているのですが、
ワイアレス接続の構成をアプリ側で制御することってできないんでしょうか?
環境はWindowsXPで、かつadmin権限で動かせます。

やりたいことは
「随時SSIDを検索して、条件にあったものと接続処理」
なのです。
Windows標準のワイヤレス構成が切れるし、
メルコのクライアントマネージャみたいなのもあるからできると思うのですが、
MSDNを漁ってもいまいち見つけ切れませんでした。

日本語、英語での情報とかポインタとか知ってましたら是非教えていただけないでしょうか。
よろしくお願いします。


681 名前:デフォルトの名無しさん :04/12/16 23:05:05
>677
そういうことはお前には関係ないはずなんだが。

682 名前:デフォルトの名無しさん :04/12/16 23:05:47
エディットボックス(エディットコントロール?)に
たくさん文字列を入れたいのですがあんまりたくさんの文字列を入れると
表示されなくなってしまいます。
もっとたくさんの文字列を入れるにはどうしたらよいのでしょうか?

683 名前:デフォルトの名無しさん :04/12/16 23:12:39
>>682
98?

684 名前:デフォルトの名無しさん :04/12/16 23:13:23
>>682
エディットボックスをあきらめてリッチテキストとかにする。

685 名前:デフォルトの名無しさん :04/12/16 23:29:11
>>684
ありがとうございます。
やってみます。

686 名前:デフォルトの名無しさん :04/12/16 23:30:28
たびたびすみません。

エディットボックスに値を入れて
Enterキーを押すと値が反映されるようにしたいのですが
Enterキーが降ってきません。
どうしたら取得できるのでしょうか?

687 名前:デフォルトの名無しさん :04/12/16 23:31:15
>686
KeyPressに来ないの?

688 名前:デフォルトの名無しさん :04/12/16 23:36:50
>>687
エディットボックスにフォーカスがあるときも
普通はくるものなのでしょうか?(私の組み方がまずいのかもしれないです。)

689 名前:デフォルトの名無しさん :04/12/16 23:40:32
ちなみにメッセージはエディットボックスの
親ウィンドウで捕まえようとしています。
キルフォーカスなどのメッセージは取得できます。

690 名前:デフォルトの名無しさん :04/12/16 23:50:58
>>689
Enter キーを押すことで、IDOK のボタンが押されたという
メッセージが来ているのかも。

691 名前:デフォルトの名無しさん :04/12/16 23:53:28
>688
フォームのデフォルトボタンの方に行っちゃってるとか?

692 名前:デフォルトの名無しさん :04/12/17 00:24:20
>>676
10Mレコードで10フィールドか。
1レコード512バイトとしても、5GB。

まぁメモリが足りたとしても、CPUが追いつかないでしょ。

693 名前:デフォルトの名無しさん :04/12/17 00:28:42
>692
なんで?

694 名前:デフォルトの名無しさん :04/12/17 03:05:14
ソートのアルゴリズムのオーダーの問題

クイックソートなんて使った日にゃ、O(n^2)で死ぬよ。
1kレコードならO(n^2)でも1Mの計算量で済むが、
10Mレコードだと 100Tの計算量になっちゃうんだよ。

695 名前:デフォルトの名無しさん :04/12/17 03:23:26
クイックソートは事実上n・log(n)じゃないの?

696 名前:デフォルトの名無しさん :04/12/17 04:25:29
>>692
つまりWin「32」APIのスレである以上オンメモリのソートなんてありえない解決策ってことか

697 名前:デフォルトの名無しさん :04/12/17 07:11:32
あのー、分割してマージソートって結論はとっくに
出てるんですが・・・

メモリなんかでやるわけねーだろ。

698 名前:デフォルトの名無しさん :04/12/17 10:39:19
ちょっと質問
ホイールの入力状態を取得するAPIってやっぱり無いんでしょうか?
GetAsyncKeyStateのような使い方で簡単に取得出来ないかなと思いまして。
メッセージで取得するしか方法は無いのでしょうか?
宜しくお願いします。

699 名前:デフォルトの名無しさん :04/12/17 10:46:15
              ,,,,,,,,,,,,,,,,,,,,
             /": : : : : : : : \
           /-─-,,,_: : : : : : : : :\
          /     '''-,,,: : : : : : : :i
          /、      /: : : : : : : : i     ________
         r-、 ,,,,,,,,,,、 /: : : : : : : : : :i    /
         L_, ,   、 \: : : : : : : : :i   / メッセージで取得したら
         /●) (●>   |: :__,=-、: / <   負けかなと思ってる  
        l イ  '-     |:/ tbノノ    \    
        l ,`-=-'\     `l ι';/      \  ニート(24・男性)
        ヽトェ-ェェ-:)     -r'          ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
         ヾ=-'     / /  
     ____ヽ::::...   / ::::|
  / ̄ ::::::::::::::l `──''''   :::|

700 名前:デフォルトの名無しさん :04/12/17 12:01:50
マウスホイールの仕様を考えればおのずと分かるような気がするが・・・

701 名前:デフォルトの名無しさん :04/12/17 12:09:12
仕様なんてシラネーヨ

702 名前:VC++ :04/12/17 14:03:12
分からないので教えていただきたいのですが・・・(^^;
VBの実行ファイルからVC++で作成したDLLの関数を実行すると例外エラーで落ちてしまいます。
落ちる箇所が決まっており、DLLから文字列をVBの実行ファイルへ送った直後に必ず発生します。
VBはフォームのロードイベントで関数をCALLしています。
【グローバル変数の宣言↓】
LPSTRg_datasendp = NULL;// VBデータ引継ぎ用バッファポインタ
【グローバルメモリ領域の確保↓】
g_hMem = GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT, sizeof(SEI_INF_TBL)+256);
if (g_hMem == NULL)
{// メモリー不足
MessageBox(g_hWnd, ERR_MALLOC, MSG_BOX_CAP2, MB_OK | MB_ICONERROR);
return-1;
}
g_datasendp = (char*)g_hMem;
【VBへ渡す文字列をセットする関数↓】
FARM_API LPSTR __stdcall GetSeiData(SHORT i_type)
{
 switch(i_type)
 {
  case TYPE_SEINAME:    // 名設定
   strcpy(g_datasendp, g_sei_inf_tblp->sei_name);
   break;
        ・
}
 return g_datasendp;
}

DLLの宣言が間違っているのでしょうか?
分かる方、是非教えていただけないでしょうか?
よろしくお願いします。

703 名前:デフォルトの名無しさん :04/12/17 14:14:42
>>702
もしかしてVB側で戻り値の型がStringになっている?

704 名前:VC++ :04/12/17 14:18:05
>>703
はい。返却値はString宣言しています。
Public Declare Function GetSeiData Lib "Farm.dll" ( _
ByVal i_type As Integer) As String ' 生産者情報取得処理


705 名前:VC++ :04/12/17 14:26:37
VBのデバッカでは動作してしまうのです・・・。
(DLL・EXE共最新です)

706 名前:69式フリーPG ◆hND3Lufios :04/12/17 14:41:15
BSTR

707 名前:デフォルトの名無しさん :04/12/17 14:42:30
>>704
確かこうすればいいはず。g_datasendpは要らなくなる。
FARM_API BSTR __stdcall GetSeiData(SHORT i_type)
{
  char *p;
  switch(i_type)
  {
  case TYPE_SEINAME:    // 名設定
    p = g_sei_inf_tblp->sei_name;
   ・
  }
  return SysAllocStringByteLen(p, strlen(p));
}

708 名前:69式フリーPG ◆hND3Lufios :04/12/17 14:48:33
VBの文字列は長さ(32bit)と文字列の格納されたUnicodeの配列で、
BSTRはunicode配列のアドレス。

VBのデバッガで動作するのは、デバッガが終端のNULLを見ているか、
たまたまと思われ。


709 名前:VC++ :04/12/17 14:50:13
>>707
回答ありがとうございます!!
早速試してみます!!

どうもでした。
結果はまた書き込みます。

710 名前:デフォルトの名無しさん :04/12/17 15:16:34
>>708
VBの文字列 == BSTR
文字列の長さを持っているのがBSTRの条件だよ。

711 名前:VC++ :04/12/17 15:17:52
>>707-708
本当にありがとうございました!!
動きました!!
助かりました!!

これで作業を進める事が出来ます。
若輩者ではありますが、今後もよろしくお願いします。


712 名前:デフォルトの名無しさん :04/12/17 15:18:34
>>710
うん。わかってる。んなもんで、>>706を書いた。
(そんときは時間がなかったので、一言だけ書いたけど)

713 名前:デフォルトの名無しさん :04/12/17 15:21:15
BSTRなのにstrlenでいいのけ?

714 名前:デフォルトの名無しさん :04/12/17 15:22:42
http://pooh3.dip.jp/vbvcjava/string/tobstr.htm

715 名前:デフォルトの名無しさん :04/12/17 15:42:39
return A2BSTR(p);
でもよかったとおもうべな。

716 名前:デフォルトの名無しさん :04/12/17 16:41:49
>>713
VBはDLL関数に文字列を渡したり返したりするときに勝手にShift JISとUnicode間の変換をしてくれるから平気。

717 名前:デフォルトの名無しさん :04/12/17 16:53:52
>>713
だめだよね。
全角文字ばかりだからたまたま動いている、と想像する。

718 名前:デフォルトの名無しさん :04/12/17 16:58:37
(^( さすがVB )^)

719 名前:デフォルトの名無しさん :04/12/17 18:24:20
すみませんDLLにバージョン情報付けたいのですが
DLLリソースつかえませんよね?
どうすれば・・・
おねがいします

720 名前:デフォルトの名無しさん :04/12/17 18:25:23
>>719
普通にリソースつけられるが‥‥

721 名前:719 :04/12/17 18:30:22
ごめん・ほうとうにごめん
ちょっと子一時間説教されてきます
なぜかリソース使えないつもりでした

722 名前:デフォルトの名無しさん :04/12/17 18:35:50
APIの質問じゃないと思うんですけど
コモンダイアログのGetOpenFileNameを呼び出すと
画面の左上にウインドウが表示されてしまいます・・
これを画面中央に表示させたいのですが
OPENFILENAMEに何か値を入れると直るのでしょうか?

環境はVC7でMFCは使ってません




723 名前:デフォルトの名無しさん :04/12/17 18:52:17
hwndOwnerにハンドルをセットするとそのウィンドウの左上あたりに表示されるみたい

724 名前:722 :04/12/17 19:05:45
>>723
できました!
ありがとう、感謝


725 名前:デフォルトの名無しさん :04/12/17 20:44:47
エディットコントロールのフォントを変えたのですが、カーソルの大きさがそのままで変わりません。
デフォルトの文字サイズより小さくしたのですが、エディットコントロールの高さも変わりません。
高さが変わらないのはカーソルのせいではないかと思うんですけど・・・。
解決方法をお願いします。

エディットコントロールのフォント変更は、WM_CTLCOLOREDITが来たときに
wParamからhdcを取得して、あらかじめ用意しておいてフォントをSelectObjectで選択しています。

726 名前:デフォルトの名無しさん :04/12/17 20:56:09
サブクラス化してみたらどう?

727 名前:725 :04/12/17 21:04:05
>>726
ありがとうございます。
やってみます。

728 名前:デフォルトの名無しさん :04/12/17 21:04:08
WM_SETFONT

729 名前:725 :04/12/17 21:04:59
>>728
おっと、
ありがとうございます。
調べてみます。

730 名前:725 :04/12/17 21:12:26
WM_SETFONTでできました。
ありがとうございました。

731 名前:デフォルトの名無しさん :04/12/18 12:48:51
リストボックスの選択されている項目の文字列を取得するにはどうしたらいいのでしょうか?

732 名前:デフォルトの名無しさん :04/12/18 12:59:00
MSDN眺めれば5分とかからずわかりそうな事を・・・

733 名前:デフォルトの名無しさん :04/12/18 13:04:09
>>732
知らないのなら黙ってて下さい。

734 名前:デフォルトの名無しさん :04/12/18 13:10:16
OSだけ再起動したいのですが、どうしたらよいでしょうか
(昔のOSでSHIFT押しながら再起動をしたときのように)?

735 名前:731 :04/12/18 13:23:10
>>732
MSDNは異常に重いうえに分かりにくいのですが・・・。
一応見てみます。

736 名前:731 :04/12/18 13:32:02
すいません、やっぱりMSDNではちょっと無理があります。
どこを調べていいのか分からない上に、検索文字列に日本語を使えないのは厳しいです。
もうちょっとまともなサイトを紹介していただけませんでしょうか?

737 名前:デフォルトの名無しさん :04/12/18 13:35:01
>>736
http://www.google.co.jp/search?num=50&hl=ja&newwindow=1&c2coff=1&q=site%3Amsdn.microsoft.com+ListView&lr=

738 名前:デフォルトの名無しさん :04/12/18 13:41:24
>>737
リストビュー

>>736
LB_GETCURSEL
LB_GETTEXT
ググれ

739 名前:731 :04/12/18 13:57:26
>>737
リストボックスです。

>>738
ありがとうございます!
LB_GETTEXTでできました!

740 名前:デフォルトの名無しさん :04/12/18 16:07:15
リッチエディットに画像を表示する方法はありますか?
Wordのように、改行されると画像も下に移動するようにしたいのです。
Borland C++ Compilerを使用しています。

741 名前:デフォルトの名無しさん :04/12/18 19:49:26
MFCとSDKって出来る事が違うのですか?
今はSDKしか勉強していないのですが、MFCも扱えた方がいいですか?

742 名前:デフォルトの名無しさん :04/12/18 19:52:34
>>741
SDKが扱えるならMFCなど要らん

743 名前:デフォルトの名無しさん :04/12/18 21:14:33
>>742
それはちょっと違うと思う

744 名前:742 :04/12/18 21:25:55
>>743
そうなのか?
俺はそういうのをどこかのサイトで読んでから、それを信じてたがw

745 名前:デフォルトの名無しさん :04/12/18 21:36:05
適材適所
MFCや他のライブラリを使えば短時間で簡単に仕上げられる仕事を
SDKレベルで車輪の再開発している同じフロアのやつを見ると腹が立つ。
もちろんMFCが想定しないようなアプリケーションスタイルとか、細かい
ケアが必要なものはSDKレベルでやったほうが良い場合も多い。



746 名前:デフォルトの名無しさん :04/12/18 21:40:05
>>742
CRectTrackerなんぞ自分で作るのか?

747 名前:デフォルトの名無しさん :04/12/18 21:40:51
細かいケアが必要なものも最近じゃATL/WTLで作ってるな、俺は。
一度楽するとSDKで作る気起きん。

748 名前:デフォルトの名無しさん :04/12/18 21:48:10
ライブラリの限界にぶちあたるとそれを回避する方法を考えたり
最悪パッチ作ったりと大変だけど、基本的には圧倒的にライブラリ
使ったほうが生産的だよな


749 名前:デフォルトの名無しさん :04/12/18 22:00:27
他人のソース見たりしないんだろうか?
MFCも知らないと損だろ

750 名前:デフォルトの名無しさん :04/12/18 22:09:23
>>749
MFCは使ったことないけどMSDN見れば(特にAPIのラッパ部分は)大体理解できるから問題ない。


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