C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 >>
■1806  VC++で作成したコールバックDLLをc#で使用するには
□投稿者/ DLLをはじめて使う者 -(2007/03/06(Tue) 23:46:17)

    分類:[C# (Windows)] 

    はじめまして。
    DLLをはじめて使う者です。

    VC++でCBTProcをフックして、ウィンドウの状態を取得するDLLを
    作成しました。

    作成したDLL関数は全てCALLBACKです。
    それをC#で使用するにはどのように記述すればよいのでしょうか?

    以上、丸投げ感は否めませんが宜しくお願いします。

    以下VC++のソースです。

    #define STRICT
    #include <windows.h>
    #include <stdio.h>
    #include <HookDLL.h>

    #pragma data_seg(".sharedata")
    HHOOK hHookWnd = 0; // フックプロシージャハンドル
    HWND hWndSend = 0; // メッセージ送信先のウィンドウハンドル
    #pragma data_seg()

    // *************************************************************/
    // 関数名:DLLエントリポイント
    // *************************************************************/
    BOOL WINAPI DllMain(HINSTANCE hInst, DWORD fdwReason, LPVOID lpReserved)
    {
    (void)lpReserved;
    if(fdwReason==DLL_PROCESS_ATTACH) {
    hdll = hInst;
    }

    return TRUE;
    }

    // *************************************************************/
    // 関数名:コールバック処理
    // *************************************************************/
    LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
    switch(nCode)
    {
    // ウィンドウが作成される
    case WM_USER+1:
    // 指定されたウィンドウへメッセージ送信
    PostMessage(hWndSend, WM_CREATEWINDOW, wParam, lParam);
    break;
    // ウィンドウがアクティブ化
    case WM_USER+2:
    // 指定されたウィンドウへメッセージ送信
    PostMessage(hWndSend, WM_ACTIVEWINDOW, wParam, lParam);
    break;
    // ウィンドウが破棄される
    case WM_USER+3:
    // 指定されたウィンドウへメッセージ送信
    PostMessage(hWndSend, WM_DESTROYWINDOW, wParam, lParam);
    break;
    }
    //次のフックを呼ぶ
    return CallNextHookEx(hHookWnd, nCode, wParam, lParam);
    }

    // *************************************************************/
    // 関数名:フックインストール
    // *************************************************************/
    void CALLBACK SetHook(HWND hWnd)
    {
    hHookWnd = SetWindowsHookEx(WH_CBT, CBTProc, hdll, 0);
    hWndSend = hWnd;
    }

    // *************************************************************/
    // 関数名:フックアンインストール
    // *************************************************************/
    void CALLBACK ReleaseHook()
    {
    UnhookWindowsHookEx(hHookWnd);
    }
親記事 /過去ログ10より / 関連記事表示
削除チェック/

■16189  Re[27]: VC++.NETについて
□投稿者/ 鶏唐揚 -(2008/03/31(Mon) 09:36:15)
    お久しぶりです。

    >VC++全体の話しと勘違いしておりました。
    一応VC++.NETの話題ですが、元から.NETありきのVB/C#と違いNativeも混じるため、
    VC++全体の話題は避けられない(と思う)ので、OKにしたいと思います。

    >・7.1まで正常に動作していたロケール周りで不具合発生(9.0で修正)
    >・8.0まで正常に動作していたADL周りで不具合発生
    言語レベルのバグはいつの時代も存在していたMS…
    VC++7.1にはバグないんですかね?
    VC++6.0にあったバグが直ったとか、逆に出てきたバグとか
    あれば教えてほしいと思います(今メインで使ってるのがVC++2003なので)
記事No.16012 のレス /過去ログ33より / 関連記事表示
削除チェック/

■32532  Re[7]: 電卓 ((1+2)3)カッコの入れ子
□投稿者/ επιστημη -(2009/02/08(Sun) 20:26:17)
>
    > 実地試験できませんが,"(0+1)+2*(3+(4*5+6)*7)/8+10" なんて場合は,
    > 逆ポーランド記法を組み立てる途中にスタックのポップ/プッシュが多発して,
    > 評価と組み立てを同時にできなかったと思ったけど,そうでもないのかな.

    えーと、当然再帰にハマるわけですが、少なくともカッコの入れ子の深さまでは
    関数呼び出しの連続になるでしょう。すなわちcall-stackを消費します。
    とはいえ数百段くらいはどってことないハズよん。
記事No.32500 のレス /過去ログ57より / 関連記事表示
削除チェック/

■50050  Re[2]: フォームのサイズ変更でラベルが動く
□投稿者/ 佐藤 -(2010/05/27(Thu) 10:29:33)
    ありがとうございました。
記事No.49998 のレス / END /過去ログ84より / 関連記事表示
削除チェック/

■55819  Re[1]: HIDデバイスのオープンで失敗する
□投稿者/ aetos -(2010/12/15(Wed) 10:46:36)
    No55818 (焦げ太 さん) に返信
    > (1)DuplicateHandleで複製することにより「Windows 自体が制御を
    >  つかんでいるHIDデバイス」を開くことは可能でしょうか?
    >
    > (2) (1)が可能な場合、DuplicateHandleの使用方法の間違いを
    > ご指摘いただきたいです。そもそも複製するハンドルは
    > HDEVINFO であっておりますでしょうか?

    ダメでしょう。
    DuplicateHandle で複製できるハンドルは以下のページに列挙されているものだけです。
    http://msdn.microsoft.com/ja-jp/library/ms724251.aspx
記事No.55818 のレス /過去ログ93より / 関連記事表示
削除チェック/

■75639  フォーム上でのKeyDownの補足
□投稿者/ フォックス -(2015/04/17(Fri) 11:29:57)

    分類:[VB.NET/VB2005 以降] 

    VB2008を使用しています。

    あるWindowsフォーム上でCtrl+指定キーを押すと
    指定した処理が行われるようにしたいと思っています。
    (もしかしたらAlt+指定キーにするかも知れません。)

    ただし、このフォーム上のコントロールにフォーカスがあるためか、
    FormのKeyDownまたはPreviewKeyDownイベントの補足ができません。

    このフォームには、以下のコントロールが配置されています。
    Form上…タブコントロールとボタン2つ
    タブコントロール上…タブページが4つ
    各タブページ上…DataGridViewが1つとボタンが3つ

    例えば、任意のDataGridView上にフォーカスがある場合、
    このDataGridViewのPreviewKeyDownイベントでキー押下を補足することができましたが、
    実際にはどこにフォーカスがあるか分からないので、
    このフォーム上のすべてのコントロールに対して
    PreviewKeyDownイベントハンドラを設定する必要があるのでしょうか?

    もしその必要がある場合、AddHandlerで動的にハンドラを設定することが、
    今後のメンテナンスを考えた場合においても楽だと思いますが、
    フォーム上のすべてのコントロールのリストを取得するにはどうすればいいのでしょうか?
    (Form1.Controlsコレクションは、タブコントロールやPanelのような
    コンテナ上のコントロールは含まれないのですよね?)
親記事 /過去ログ127より / 関連記事表示
削除チェック/

■87317  Re[1]: 入れ子になった名前空間の同じ名前のクラスのシリアライズについ
□投稿者/ Hongliang -(2018/05/10(Thu) 12:42:50)
    // この状況は入れ子とは言わないと思います。

    保存クラスの設定Aプロパティまたは設定Bプロパティ、あるいはその両方に、
    [XmlElement(Namespace="何か適当な一意となる識別子文字列")]
    public A.設定 設定A { ... }
    を設定しろ、といった感じのが例外メッセージの内容ですね。

    あるいは、A.設定クラスまたはB.設定クラスに、XmlRoot属性をつける方法もあります。
    [XmlRoot(Namespace="何か適当な一意となる識別子文字列")]
    public class 設定 { ... }

    保存クラスも両設定クラスも手を入れることができない、ということなら、
    XmlSerialzierをnewする際に、XmlAttributeOverridesクラスを使って、上記のような属性をシリアライズする側で設定することもできます。

    なお上記のような属性を付けた場合、出力されるXMLにはxmlnsが出力されることになります。
    当然デシリアライズする際にも必要なので、既存のXMLを読み足りたいという要望には応えられなさそうです。
記事No.87305 のレス /過去ログ150より / 関連記事表示
削除チェック/

■92377  Re[1]: 日付の書式変更
□投稿者/ はたさん -(2019/09/17(Tue) 11:49:22)
    長くなり読みにくくなってしまいすみません。
    宜しくお願い致します。
記事No.92376 のレス /過去ログ159より / 関連記事表示
削除チェック/

■92393  Re[2]: 日付の書式変更
□投稿者/ WebSurfer -(2019/09/19(Thu) 20:29:01)
    No92377 (はたさん さん) に返信

    フィードバックをいただけないのでしょうか?
記事No.92376 のレス /過去ログ159より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -