unity3d 实现windows 消息

这篇博客介绍了如何在Unity3D游戏中实现Windows消息处理。通过C++编写的DLL,与Unity的C#脚本交互,捕获并处理如WM_IME_SETCONTEXT等IME相关消息,从而实现输入法兼容性。在Unity中,使用IMEInputBox脚本进行初始化和释放操作,确保游戏窗口能正确接收和响应Windows消息。
摘要由CSDN通过智能技术生成

Windows Message in the Unity3D : WndProc

先前提到可以用 Hooks 的方法在 Unity 裡監控 Windows Message,但是使用 Hooks 這個方法我們沒辦法更改 Message 的內容。因此這邊提出第二個方式。Windows 傳送 Message 給 Unity 時,會呼叫 Unity 預設的 Message 處理函數,但透過函數:

pOldWndProc =(WNDPROC)SetWindowLong(hWnd, GWL_WNDPROC, (LONG)SubWndProc);

我們可以將原本 Windows 呼叫 Unity 預設的 Message 處理函數改為呼叫我們指定的函數,指定的函數把我們想要處理的 Message 處理完,再把剩下的 Message 丟回給 Unity 來處理。

原本實作是使用 dllimport 讓 SetWindowLong function 可以在 C# 裡呼叫, 並把整個 callback function 及流程實作出來,且測試時運作都相當正常,但程式在關閉時會出現 Access Violation 的錯誤,後來將整個實作改成 C DLL 之後錯誤才沒有出現,不知道是什麼原因?底下是 DLL 部分的原始碼:

  1. #include "stdafx.h"
  2. LRESULT CALLBACK SubWndProc(
  3. HWND hWnd, 
  4. UINT nMessage, 
  5. WPARAM wParam, LPARAM lParam); 

  6. WNDPROC  gOldWndProc = NULL; 
  7. HWND  gUnityWnd = NULL; 

  8. #ifdef    __cplusplus
  9. extern "C" {
  10. #endif    /*    __cplusplus    */

  11. __declspec(dllexport) bool __stdcall init(HWND hWnd)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值