1 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 03:44:55 ] スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。 やさしいお兄さんやお姉さんたちが答えてくれるかも。 過去スレ、関連リンクは>>2-5 くらい。 ■注意 ・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。 ・日本語版MSDN Online Libraryは不完全です。英語版(msdn.microsoft.com/library/ )の利用推奨。 ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。 ・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
730 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 22:29:47 ] VCには存在するな
731 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 23:05:42 ] unsigned char*からchar*へ変換できないなんて、 単にWindowsプログラムのほうではC++としてコンパイルしているだけだと思う。 Cなら(警告は出るだろうが)エラーにならずにコンパイルできるはず。
732 名前:デフォルトの名無しさん [2007/04/12(木) 23:21:58 ] コンパイルオプション/Jでは配列のunsignedchar*がchar*に変換できないらしく だめでした情報ありがとうございます
733 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 23:26:48 ] とりあえず F4 でエラー行に飛べることを知ってるだけで 効率はかなり変わると思うよ F4 → カーソル移動 → Ctrl+V → (以下ループ)
734 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 23:27:36 ] ごめん、VC 限定ね… VC スレと勘違いした
735 名前:デフォルトの名無しさん [2007/04/12(木) 23:52:06 ] いえ、ありがとうございます ですが元のソースはいじるわけにはいかないんですよ ちょっと勝手に書き換えるとまずい事情がありまして
736 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 23:59:12 ] WinMainから始まろうと、mainから始まろうと、 同じCのソースコードであることに変わりはない。 片方でコンパイルできたものが、もう片方でコンパイルできないなんて、 (argc/argcやmainそのものに依存している場合などを除いて)有り得ない。 >>731 は試した?
737 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 00:00:18 ] >>735 そういうことってよくあるよね。 あ〜邪魔臭いコードでもいじれない。
738 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 00:22:56 ] >>735 Cでは警告は出ないようだ。 こんな感じでC++とCのコードは混ぜることが出来る。 extern "C" { #include "古いコード.h" } cl 新しいコード.cpp 古いコード.c
739 名前:デフォルトの名無しさん [2007/04/13(金) 01:03:16 ] とりあえず古いソースのヘッダをincludeしている箇所を extern "C"{}で囲ってみましたが効果ないっぽいです 情報ありがとうございます
740 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 01:18:34 ] >>739 意味わかってないだろ
741 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 01:26:44 ] IDEから使うと /TP がデフォになってるな。 これをはずせば拡張子に応じたコンパイルをしてくれるが、 プリコンパイルヘッダーやら他のところで引っ掛かりが出てるよ。 混ぜるのはこいつのレベルじゃ無理かもしれんね。
742 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 09:35:23 ] 文字列に付けるszってなんですか?
743 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 09:39:19 ] Win32APIでは構造体のサイズを取得してそのサイズを構造体にセットするというのをよく使いますが、 何故このようなやり方をするのでしょうか?
744 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 09:42:10 ] >>742 ハンガリアン記法
745 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 09:43:57 ] >>743 バージョンが上がって仕様が変わって構造体の内容が変わっても 互換性を維持するため。
746 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 10:06:09 ] まじ?
747 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 10:09:16 ] >>742 zero(\0)終端string(文字列)の略
748 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 10:36:38 ] nsはなんですか?
749 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 10:46:51 ] >>748 質問まとめてしろよ
750 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 12:01:00 ] >>746 >745のことならマジ。
751 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 13:47:56 ] ちょっと思うんだけど、 ファイルパス長ってMAX_PATHバイト?MAX_PATH文字数? MAX_PATHバイトだったら、マルチバイト文字で半分になるんだけどいいの? それとも、 #define MAX_PATH_NAME (MAX_PATH * (2 / sizeof(TCHAR))) な事すんの?
752 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 13:50:14 ] 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するからMAX_PATH自体あまり意味無いような・・・
753 名前:751 mailto:sage [2007/04/13(金) 13:50:49 ] 補足 TCHAR szFile[MAX_PATH_NAME + 1]; とつかうとして
754 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 13:57:06 ] まあDOS/Windows 3.1時代の遺物なんで
755 名前:751 mailto:sage [2007/04/13(金) 14:01:31 ] >>752 CreateFileの説明の通り In the ANSI version of this function, the name is limited to MAX_PATH characters.To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. For more information, see Naming a File. ワイド文字で32767文字って事は、65534バイト宣言しとけばいいの? ちょいもったいない気が・・・
756 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 14:19:59 ] 必要に応じて動的に確保すればいいんじゃないの? どうしても固定長にしたいわけ?
757 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 14:24:08 ] OPENFILENAME の戻り用の器は MAX_APTH 使った固定長だな。
758 名前:751 mailto:sage [2007/04/13(金) 14:36:11 ] >>756 固定長にしたい理由というわけじゃありませんが、 明確な理由があれば、それに準じたいと思っています。 もちろん、実用的な側面でも判断しますが
759 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 15:23:35 ] ぐだぐだ言ってないで実用的な面でどうなるか 試してみろよ。 FAT32,NTFS,共有ドライブで長い名前のファイル名作るくらいできないの?
760 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 17:02:48 ] 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから
761 名前:デフォルトの名無しさん [2007/04/13(金) 17:07:47 ] >>760 うるさいばか
762 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 17:12:13 ] >>758 9x系OSでANSI版のAPIつかってみなはれ ちなみにMSでは、MAX_PATHは文字数としてあつかっとるよ 稀にMS社内でも開発者が混乱してしもて、 大穴あけてしもうたこともあるけどね
763 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 17:13:42 ] まったく1文字1Byteの連中はこれだから・・
764 名前:デフォルトの名無しさん [2007/04/13(金) 17:25:11 ] >>763 初心者にこのスレは不向きですよppp
765 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 17:26:38 ] >>751 これ以上はスレ違い APIではなくコーディングの話なら Cスレに行け
766 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 17:35:44 ] >>764 欧米の方ですか?
767 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 17:47:03 ] いいえ東亜です。
768 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 17:52:25 ] >>763 いや、ワイドキャラクタでも1文字2バイトじゃ済まないはずなんだが。 サロゲートペアとかあると4バイトになる。 あれ、Win32APIってUCS-2のままだったっけ? まぁサロゲートペア対応しても、そもそも文字の定義ってなに?ってなるし。
769 名前:デフォルトの名無しさん [2007/04/13(金) 18:14:56 ] ファイルの更新日時を変更するAPIを教えてください
770 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 18:23:11 ] GetFileTime
771 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 18:26:48 ] Sじゃねーのか
772 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 18:28:36 ] お前さん頭いいな。
773 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 18:36:47 ] Mですから
774 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 18:42:44 ] >>768 ビル・G 数種類の奇妙な文字で文章を書く、親愛なる日本人の皆さん。 私はアルファベット26文字で美しい詩的な文章を綴り、人々を感嘆させるビル・Gである。 ユニコードとは何か。簡単に言えば、あらゆるプラットフォームで様々な言語を共通に扱えるようにするための統一的なコード体系のことだ。 もっと簡単に言おう。アルファベット以外の野蛮な絵文字を使ってコミュニケートする第三世界の人間に対する、心からの配慮だ。 今までも手を焼いてきた。2バイトコードの各国語対応も、少しは楽になるのだけどね。 君たちの国でも、ユニコードの問題が盛んに議論されているようだね。 日本や中国や台湾で使っている漢字コードやフォント違うって? それは君たちが今までに勝手な文字を作りすぎてきたツケに過ぎないよ。 また、『固有の文化』という言葉で語られる微妙な差異に関する議論は、 私にはちょうど「靴下は右足から履かなければならない」 「いや、左足から履くのが伝統だ」と言い争いをしているようにしか聞こえない。そんなことはどうでもいいじゃないか!
775 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 18:54:31 ] 拘りすぎてバカを見るのが東洋人 大雑把過ぎてバカを見るのが欧米人
776 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 19:25:50 ] CJK以外にもBidiとか言語タグとか対応するのが 遅かったねぇ。 BMPを16bitじゃなくて32bitにしてれば、もう少し問題先送りできたのに。 あとはユニコードまでも取り込んだGB18030とかどうするんだろうっていう。。。
777 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 19:31:01 ] XP以降のメモ帳で右から左に読むにして Hello, World打つだけでも軽く死ねるなw
778 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 20:22:24 ] 神の罰です
779 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 21:24:16 ] >>748 ナノ秒 冗談じゃなくて素直に考えて
780 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 21:26:31 ] >>768 ファイル名の制限という観点ではコードユニットの数で数えるから関係ない
781 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 21:31:48 ] ウニコードはうまそうだ
782 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 21:42:17 ] >>780 NTFSはどのエンコーディングを使ってんの?
783 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 21:54:10 ] >>780 ドキュメント上の問題のことです。 n文字という表現では最大バイト数は判りにくい。
784 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 21:54:42 ] >>782 おそらくUTF-16
785 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 21:55:22 ] もちろんUTF-16LE
786 名前:デフォルトの名無しさん [2007/04/13(金) 23:01:50 ] 結局、MAX_PATHの単位はなんなんだ? 明らかにバイト数じゃない 文字数も数えてみたがなんかちがう 会社によって1バイトのズレも許さないからこのあいまいな仕様がかなりムカつく ちなみにファイルダイアログの最長はXPSP1までは0xFFFFだったがXPSP2からはどこまではいるのかよくわからん ドラッグアンドドロップの限界は一体どこなんだ?
787 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 23:18:44 ] WinNTのNTFSドライバのパス名制限が (2^15-1) UTF-16符号単位だったと思うが
788 名前:751 mailto:sage [2007/04/13(金) 23:29:46 ] >>759 もちろん、\\.\〜の長いファイル名前をCreateFileで作成し、 動作を確認しています。 しかしながら、エクスプローラも捕らえられないファイル名は実用的か? それともMAX_PATH以上32767文字以下で、もっともらしい定数があり、 自分が知らないだけかわからんとです。
789 名前:デフォルトの名無しさん [2007/04/13(金) 23:44:40 ] GUIアプリでコンソールを表示するにはどうすればいいのでしょうか? やりたいことは、 ・起動した時にはコンソールアプリのように振る舞う。 ・ある入力があった時点でウィンドウを表示し、GUIアプリとして振舞う main()で起動するとコンソールは出ますが、WinMain()の第一引数で取得できる HINSTANCEが取得できないので、GUIアプリとして振舞えない。 WinMain()で起動するとGUIは出せるが、コンソールへ出力を行えない。 WinMain()でGUIアプリとして起動しておいて、必要に応じて(何らかの関数呼び出しによって) コンソールを表示させるのが正しいやり方なのかと思っていますが、調べてもやり方が見つかりません。 どなたかお助けを・・・
790 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 23:49:13 ] >>789 HINSTANCE == GetModule(0) だったハズ。
791 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 23:51:05 ] コンソール部分は別にしてCreateProcessは?
792 名前:791 mailto:sage [2007/04/13(金) 23:51:06 ] あ、すまん間違えた。 ×:GetModule ○:GetModuleHandle
793 名前:792 mailto:sage [2007/04/13(金) 23:52:04 ] >>792 ==>>790 !=>>791 もう寝る!
794 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 23:54:36 ] >>789 CreateProcess, GetStdHandle, SetStdHandle, CreatePipeでリダイレクト。
795 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 23:54:38 ] AllocConsole stdout
796 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 23:56:39 ] コンソール プロセスを生成して標準ハンドルをリダイレクトする方法 support.microsoft.com/kb/190351/ja
797 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 00:00:43 ] >>789 WinMainから始まるプログラムにAllocConsoleを使う方法も出ているが、 個人的には、手間要らずにC stdioやC++ iostreamを使えるので、 mainから始まるプログラムにした方がいいと思う。 EXEのインスタンスハンドルは791のとおりGetModuleHandleで。
798 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 00:31:27 ] >>777 前からおもってたのだが、右から左に読む文化圏に対応してるなら、 上から下に読む文化圏にも対応してていいんじゃないかと思ったりするのだがまぁいいや。 そういえば、昔、Macのことえりだったか縦書きIME変換やってくれてた記憶があったな〜
799 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 00:44:47 ] MS-IMEも、Wordなんかで縦書きにすればそれにあわせてくれる。
800 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 06:13:01 ] 質問です。GetProcAddressを使ってDLL内の関数を呼び出したいのですが、 上手くいきません。プログラムを実行すると、そのまま強制終了してしまいます。 FARPROC SetHook,ResetHook; SetHook = GetProcAddress(LoadLibrary(TEXT("hook.dll")),TEXT("_SetHook")); ResetHook = GetProcAddress(LoadLibrary(TEXT("hook.dll")),TEXT("_ResetHook")); として関数のアドレスを取得しています。各関数のアドレスは SetHook : 011412A0 ResetHook : 011412D4 でした。tdump.exeでは Exports from hook.dll 3 exported name(s), 3 export addresse(s). Ordinal base is 1. Sorted by Name: RVA Ord. Hint Name -------- ---- ---- ---- 000012D4 1 0000 _ResetHook 000012A0 2 0001 _SetHook 00009158 3 0002 ___CPPdebugHook という結果が得られました。 GetProcAddressの使い方が間違っているのでしょうか? コンパイラの設定に問題があるのでしょうか? どのあたりに原因があるのか指摘して下さい。お願いします。<(_ _)> コンパイラはBCCです。BCC Developerでビルドしています。
801 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 06:20:21 ] GetProcAddress の第2引数は LPCSTR だが。
802 名前:800 mailto:sage [2007/04/14(土) 06:38:04 ] >>801 SetHook = GetProcAddress(LoadLibrary(TEXT("hook.dll")),"_SetHook"); ResetHook = GetProcAddress(LoadLibrary(TEXT("hook.dll")),"_ResetHook"); としたのですが、上手くいきません。関数名の指定が間違っているのでしょうか?
803 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 06:46:26 ] >>800 まずは「強制終了」する場所を探らないと。 その情報だけじゃ、GetProcAddress() 絡みの問題かどうかなんてわ からん。
804 名前:800 mailto:sage [2007/04/14(土) 06:57:58 ] >>803 関数の呼び出し時に強制終了します。 インポートライブラリを通しての呼び出しには成功したのですが。
805 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 07:02:09 ] それはGetProcの問題じゃないだろうな FARPROCの宣言はどうなってる?
806 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 07:07:26 ] >>804 インポートライブラリを通しての呼び出しには成功ってんだったら GetProcAddressで失敗なんじゃなくて それで取った情報を使う時の失敗だろ どうやって関数呼び出してんのか見せてみぃや
807 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 07:12:39 ] >>805 VCだと「typedef int (*FARPROC)(void)」だが、BCCはどうなんだろう・・・ ていうかそのまんま使ったら普通コンパイルとおらないかも?
808 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 07:16:41 ] 呼び出し規約が間違っている。それでスタック壊れているんだろ。
809 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 07:18:09 ] 普通目的の関数に合致した関数ポインタの型を定義してそれで使うもんじゃね? ただのFARPROCにぶち込んでるヤツ初めて見た
810 名前:800 mailto:sage [2007/04/14(土) 07:39:35 ] >>805-809 レスありがとうございます。 #define EXPORT __declspec (dllexport) typedef EXPORT HHOOK (*SETHOOK)(const HWND hCaller); typedef EXPORT void (*RESETHOOK)(void); SETHOOK SetHook; RESETHOOK ResetHook; と関数ポインタの型を定義してから SetHook(hWnd); ResetHook(); という感じで呼び出してみたのですが、やはり上手くいきません。
811 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 08:02:06 ] もう一度レスを見直すんだ。そこに答えがある。
812 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 08:17:26 ] VC2005でstrlen等を使うと
813 名前:800 mailto:sage [2007/04/14(土) 08:17:48 ] >>811 呼び出し規約の整合性に問題があるのでしょうか? もう少し詳しく教えて頂けないでしょうか?
814 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 08:34:30 ] 提供する側では__declspec (dllexport)が必要だろうが 使う側では要らないだろ。 提供する側でも使う側でも__stdcallとかを指定したほうが安全。 デフォルトに任せれば同じになっている可能性が高いけど 不一致になる危険性がある。 GetProcAddressじゃなくて暗黙のリンクでもいえることだけどね。 GetProcAddressの戻り値が0ってことはないよね。
815 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 08:56:00 ] >>810 DLL側のソースでその2つの関数がどう定義されているかもチェック
816 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 08:57:17 ] うまくいかないのと直接の関連はないが、 一々LeadLibraryするな。 1回ロードしたら、そのハンドルを使いまわせ。
817 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 08:58:36 ] LeadLibrary
818 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 09:01:36 ] 一度だけLoadLibraryして、そのハンドルを保持して使うってのもそうだけど GetProcAddressに直接ぶち込むのもどうかと 誤動作の原因になる可能性は充分にあるかと
819 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 09:06:34 ] 誤動作するとは思えないが、直接GetProcAddressに渡していたら、 FreeLibraryするのに不便だろう。 GetModuleHandleで後から解放用にハンドルを得るなんて無茶も甚だしい。
820 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 09:08:22 ] 誤動作するとは思えないって思うのが危ないな 常に誤動作するかも知れないと思ってコーディングすべし
821 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 09:09:01 ] >>787 UNICODE_STRINGの構造上の問題だな 同様の理由でNT系はコマンドラインの長さにも32767文字(UTF-16符号単位)制限がある 驚くべきことにWin9xだとコマンドライン長が1MB超えても大丈夫。
822 名前:800 mailto:sage [2007/04/14(土) 09:09:21 ] >>814-819 レスありがとうございます。 DLLの関数を #define EXPORT __declspec (dllexport) EXPORT HHOOK WINAPI SetHook(const HWND hCaller); EXPORT void WINAPI ResetHook(void); とし、関数を呼び出すプログラムで typedef HHOOK WINAPI (*SETHOOK)(const HWND hCaller); typedef void WINAPI (*RESETHOOK)(void); SETHOOK SetHook; RESETHOOK ResetHook; HMODULE hook_lib; hook_lib = LoadLibrary("hook.dll"); SetHook = GetProcAddress(hook_lib,"SetHook"); ResetHook = GetProcAddress(hook_lib,"ResetHook"); として関数を呼び出したのですが、やはり駄目です。GetProcAddressの戻り値を 再度確認したのですが、0ではありませんでした。
823 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 09:10:20 ] 32767文字を超えるコマンドライン自体普通無いだろ・・・
824 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 09:12:32 ] typedefのWINAPI要らなくね?
825 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 09:18:50 ] >>822 あんまり関係ないけどGetProcAddressの戻り値ってキャストしなくてもコンパイル通るのか?
826 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 09:58:58 ] 関数ポインタの宣言なんだが・・・ typedef HHOOK (WINAPI *SETHOOK)(const HWND); typedef void (WINAPI *RESETHOOK)(void); じゃねーの?WINAPIの位置が違うとか。 >>825 警告が出るだけだったような。
827 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 10:03:42 ] 呼び出し規約の記述位置は括弧の中だね。 戻り値に付属なわけじゃなくて、 関数に付属する情報だからなんだろうけど、 最初は戸惑うよね。
828 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 10:07:09 ] Borlandの昔のコンパイラだと微妙に仕様が違ったり 標準キーワードじゃないから仕方ないけど
829 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 10:14:48 ] なんでだろうね? 間違って古いDLLが残っているとか。
830 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 10:18:02 ] DLL側と呼び出し側のソースをまとめてうpってもらった方が話が早くていいかもしらんな