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

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

C# と VB.NET の入門サイト

Re[4]: VC++で作成したコールバックDLLをc#で使用するには


(過去ログ 10 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■1806 / inTopicNo.1)  VC++で作成したコールバックDLLをc#で使用するには
  
□投稿者/ DLLをはじめて使う者 (1回)-(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);
}

引用返信 編集キー/
■1812 / inTopicNo.2)  Re[1]: VC++で作成したコールバックDLLをc#で使用するには
□投稿者/ 渋木宏明(ひどり) (147回)-(2007/03/07(Wed) 03:25:14)
渋木宏明(ひどり) さんの Web サイト
No1806 (DLLをはじめて使う者 さん) に返信
> VC++でCBTProcをフックして、ウィンドウの状態を取得するDLLを
> 作成しました。
>
> 作成したDLL関数は全てCALLBACKです。
> それをC#で使用するにはどのように記述すればよいのでしょうか?

ヘルプの関連項目って読みました?
それほど難解なことは無いと思うんですが。

アンマネージ DLL 関数の処理
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpguide/html/cpconConsumingUnmanagedDLLFunctions.asp

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

まさかとは思いますが、どの関数を呼ぶべきかは自分で把握してますよね?
おそらく、

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

の2つを、C# のプログラムから呼びたいんですよね?

引用返信 編集キー/
■1838 / inTopicNo.3)  Re[2]: VC++で作成したコールバックDLLをc#で使用するには
□投稿者/ DLLをはじめて使う者 (2回)-(2007/03/07(Wed) 12:52:17)
渋木宏明(ひどり) さん

アドバイスありがとうございます。
早速教えていただいたURLを参考に挑戦してみます。

わからなかったらまたよろしくお願いします。

No1812 (渋木宏明(ひどり) さん) に返信
> ■No1806 (DLLをはじめて使う者 さん) に返信
>>VC++でCBTProcをフックして、ウィンドウの状態を取得するDLLを
>>作成しました。
>>
>>作成したDLL関数は全てCALLBACKです。
>>それをC#で使用するにはどのように記述すればよいのでしょうか?
>
> ヘルプの関連項目って読みました?
> それほど難解なことは無いと思うんですが。
>
> アンマネージ DLL 関数の処理
> http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpguide/html/cpconConsumingUnmanagedDLLFunctions.asp
>
>>以上、丸投げ感は否めませんが宜しくお願いします。
>
> まさかとは思いますが、どの関数を呼ぶべきかは自分で把握してますよね?
> おそらく、
>
>>// *************************************************************/
>>// 関数名:フックインストール
>>// *************************************************************/
>>void CALLBACK SetHook(HWND hWnd)
>>{
>> hHookWnd = SetWindowsHookEx(WH_CBT, CBTProc, hdll, 0);
>> hWndSend = hWnd;
>>}
>>
>>// *************************************************************/
>>// 関数名:フックアンインストール
>>// *************************************************************/
>>void CALLBACK ReleaseHook()
>>{
>> UnhookWindowsHookEx(hHookWnd);
>>}
>
> の2つを、C# のプログラムから呼びたいんですよね?
>
引用返信 編集キー/
■2110 / inTopicNo.4)  Re[3]: VC++で作成したコールバックDLLをc#で使用するには
□投稿者/ DLLをはじめて使う者 (3回)-(2007/03/19(Mon) 13:06:30)
DLLをはじめて使う者です。

さんざん調べたのですが、どうにもうまくできません。
リファレンスを読んでもまったく理解できない状況です。
(delegate云々だとは思うのですが、
どうにも宣言の仕方、使用方法がわかりません。)

すっぱりあきらめるのことはしたくないです。
どうかコーディングの取っ掛かりを教えていただけないでしょうか?

よろしくお願いします。
以上。

No1838 (DLLをはじめて使う者 さん) に返信
> 渋木宏明(ひどり) さん
>
> アドバイスありがとうございます。
> 早速教えていただいたURLを参考に挑戦してみます。
>
> わからなかったらまたよろしくお願いします。
>
> ■No1812 (渋木宏明(ひどり) さん) に返信
>>■No1806 (DLLをはじめて使う者 さん) に返信
> >>VC++でCBTProcをフックして、ウィンドウの状態を取得するDLLを
> >>作成しました。
> >>
> >>作成したDLL関数は全てCALLBACKです。
> >>それをC#で使用するにはどのように記述すればよいのでしょうか?
>>
>>ヘルプの関連項目って読みました?
>>それほど難解なことは無いと思うんですが。
>>
>>アンマネージ DLL 関数の処理
>>http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpguide/html/cpconConsumingUnmanagedDLLFunctions.asp
>>
> >>以上、丸投げ感は否めませんが宜しくお願いします。
>>
>>まさかとは思いますが、どの関数を呼ぶべきかは自分で把握してますよね?
>>おそらく、
>>
> >>// *************************************************************/
> >>// 関数名:フックインストール
> >>// *************************************************************/
> >>void CALLBACK SetHook(HWND hWnd)
> >>{
> >> hHookWnd = SetWindowsHookEx(WH_CBT, CBTProc, hdll, 0);
> >> hWndSend = hWnd;
> >>}
> >>
> >>// *************************************************************/
> >>// 関数名:フックアンインストール
> >>// *************************************************************/
> >>void CALLBACK ReleaseHook()
> >>{
> >> UnhookWindowsHookEx(hHookWnd);
> >>}
>>
>>の2つを、C# のプログラムから呼びたいんですよね?
>>
引用返信 編集キー/
■2111 / inTopicNo.5)  Re[4]: VC++で作成したコールバックDLLをc#で使用するには
□投稿者/ シャノン (110回)-(2007/03/19(Mon) 13:25:48)
シャノン さんの Web サイト
No2110 (DLLをはじめて使う者 さん) に返信
> DLLをはじめて使う者です。
>
> さんざん調べたのですが、どうにもうまくできません。
> リファレンスを読んでもまったく理解できない状況です。
> (delegate云々だとは思うのですが、
> どうにも宣言の仕方、使用方法がわかりません。)

.NETのdelegateは、C++で言えば関数ポインタのようなものです。
VC++ DLLをVC++ EXEから使う時は、引数に関数ポインタを渡しますか?
そうでないなら、delegateは関係ありません。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -