关于delphi在DLL中使用TStyleManager加载皮肤ListView的问题

来源:互联网 发布:白银理财投资数据分析 编辑:程序博客网 时间:2024/06/01 08:15

DLL中的窗体嵌入到主程序的Panel中,一旦使用皮肤后,退出过程中程序全面崩溃,不使用皮肤没有任何的问题,不知道为什么,想着死马当着活马医,找到关键点,加上异常处理算了,自己水平可能有问题,调试到最后竟然跟踪到System.Classes单元的

{ Standard window procedure }function StdWndProc(Window: HWND; Message: UINT; WParam: WPARAM; LParam: WPARAM): LRESULT; stdcall;{$IF Defined(CPUX86)}{ In    ECX = Address of method pointer }{ Out   EAX = Result }var i,z,a:Integer ;asm        XOR     EAX,EAX        PUSH    EAX        PUSH    LParam        PUSH    WParam        PUSH    Message        MOV     EDX,ESP        MOV     EAX,[ECX].Longint[4]        PUSH    EBX        MOV     EBX,[ECX].Pointer        MOV     I,EBX        MOV     Z,ECX        MOV     a,EAX        POP     EBX        CMP     [ECX].Pointer,0        JE      @j        CALL    [ECX].Pointer        @j:        ADD     ESP,12        POP     EAXend;
函数,上面的函数是我自己调试的时候修改过的,本来想着既然是
CALL    [ECX].Pointer
出错,调试过程中也提示什么0地址,就想着加一个判断,但是调试到最后根本不是那回事,ecx好像不是0,后来又加上
 MOV     I,EBX MOV     Z,ECX
想看看结果,也没看出个所以然,无意中又加入了
 MOV     a,EAX
想着随便看看EAX的值吧,但是加上后就发现怎么回事,不出错了,程序正常了,无语啊,看着这个函数是一个消息处理函数,这样瞎弄以后也不知道有什么后果,

反正程序暂时正常了,为什么那????????????????????????????

郁闷中......................................................


0 0