我要控制最外层的主窗口处理函数,写了下面的dll以下是一个Win32 Dynamic-Link Library,只有2个文件
//----Dll.h---
//更改hWnd的处理函数
extern "C" BOOL __declspec(dllexport) __stdcall InitWndProc(HWND hWnd); 
//还原处理函数
extern "C" void __declspec(dllexport) __stdcall UninitWndProc();//----Dll.cpp---
#include <windows.h>
#include "Dll.h"
HWND g_hWnd = NULL; //最外层主窗口句柄
LONG g_WndProcOld = 0; //保存g_hWnd老的窗口处理函数//什么也不做
BOOL APIENTRY DllMain(HANDLE, DWORD, LPVOID)
{
return TRUE;
}//新的处理函数
LRESULT WINAPI WndProcNew(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
return CallWindowProc((WNDPROC)g_WndProcOld, hWnd, uMsg, wParam, lParam);
}BOOL __stdcall InitWndProc(HWND hWnd)
{
         //获得hWnd的最外层父窗口,并赋给g_hWnd
HWND hParentWnd = hWnd;
         g_hWnd = hWnd;
while ( hParentWnd )
{
hParentWnd = GetParent(hParentWnd);
                  if ( hParentWnd )  
                            g_hWnd = hParentWnd;

}
         //将g_hWnd的处理函数换成WndProcNew
if ( g_WndProcOld == 0 && g_hWnd )
{
                   g_WndProcOld = SetWindowLong(g_hWnd, GWL_WNDPROC,(LONG)WndProcNew);
return TRUE;
}
return FALSE;
}void __stdcall UninitWndProc()
{
if ( g_WndProcOld && g_hWnd )
{
                  //还原
SetWindowLong(g_hWnd, GWL_WNDPROC, g_WndProcOld);
g_WndProcOld = 0;
}
}/////////////////////////////////////////////////////////////////////
就是这么几行代码,之后在窗口的OnCreate和OnDestroy中分别调用
在单文档中使用没问题
但在MFC ActiveX Control中就会出现Unhandled exception in TSTCON32.EXE : 
0xC0000005 : Access Violation
为什么会出现这个错误呢,请各位高手指点。。不要嫌分少啊,小弟只有这些了