⊂⌒~⊃。Д。)⊃ ギブアップ
一日考えたけど、やっぱりわからん。
Notifyウィンドウを表示させられないよぅ_| ̄|○
以下コード。
module ui; import std.string; import y4d_aux.widestring; private import win32.ansi.windows; import nsmsgs.types; import nsmsgs.consts; import system; //------------------------------------------------------------------------------------------// private: // サービスハンドルを記憶する変数 HNsmService hNotify; HNsmService hMsgBox; //------------------------------------------------------------------------------------------// public: // UI/Notifyサービスをラップする関数 int Notify(char[][] lpText, int nTimeToLive, int nIcon, char[][] lpLinkTo, TNotifyClickCallback lpOnClick, int nData) { if ( !hNotify ) hNotify = GetService(NMS_UI_NOTIFY); if ( hNotify ) { TNotifyInfo notifyInfo; notifyInfo.cbSize = notifyInfo.size; notifyInfo.lpText = toWCSz(lpText); notifyInfo.nTimeToLive = nTimeToLive; notifyInfo.nIcon = nIcon; notifyInfo.lpLinkTo = toWCSz(lpLinkTo); notifyInfo.lpOnClick = lpOnClick; notifyInfo.nData = nData; return (int)CallService(hNotify, (WPARAM)¬ifyInfo, (LPARAM)0); } return 0; // 正常終了か異常終了かは判別不能 } (以下略)
system.dはこんな感じ。
module system; import std.string; private import win32.ansi.windows; import nsmsgs.types; import nsmsgs.consts; //------------------------------------------------------------------------------------------// private: // システム関数のポインタを記憶する変数 TNsmPluginInitInfo NsmInitInfo; // サービスハンドルを記憶する変数 // なし //------------------------------------------------------------------------------------------// public: // システム関数のポインタを記憶する関数 void SetInitInfo(PNsmPluginInitInfo lpInitInfo) { NsmInitInfo = *lpInitInfo; return; } // サービスの管理 HNsmService CreateService(char[] lpServiceName, TNsmServiceProc ProcAddr) { return NsmInitInfo.CreateService(toStringz(lpServiceName), ProcAddr); } (以下略)
で呼び出し側はこうなってます。
(略) ui.Notify("Onにしました", -1, NMNI_CONNECT, "", &OnNotifyClick, 0); (略) extern (Windows) void OnNotifyClick(int nData) { ui.MessageBox(null, "まゆげ犬の恐怖", MODULENAME, MB_OK); return; }
デバッグウィンドウにてCallService()がUI/Notifyを呼び出しているところまでは確認。
ということは引数の中身が何かおかしいはずだけど…
うーん。わからん。