+ -
当前位置:首页 → 问答吧 → 求教把几个win32汇编的代码换成C++的

求教把几个win32汇编的代码换成C++的

时间:2011-12-11

来源:互联网

Assembly code

externdef                    IID_IUnknown:IID
LPUNKNOWN                    typedef DWORD
LPPUNKNOWN                   typedef ptr LPUNKNOWN

IUnknown_QueryInterfaceProto typedef proto :DWORD, :DWORD, :DWORD
IUnknown_AddRefProto         typedef proto :DWORD
IUnknown_ReleaseProto        typedef proto :DWORD
IUnknown_QueryInterface      typedef ptr IUnknown_QueryInterfaceProto
IUnknown_AddRef              typedef ptr IUnknown_AddRefProto
IUnknown_Release             typedef ptr IUnknown_ReleaseProto

IUnknown struct DWORD
      QueryInterface    IUnknown_QueryInterface  ?
      AddRef            IUnknown_AddRef          ?
      Release           IUnknown_Release         ?
IUnknown ends
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;IMalloc Interface
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
externdef                    IID_IMalloc:IID
LPMALLOC                     typedef DWORD
LPPMALLOC                    typedef ptr LPMALLOC

IMalloc_AllocProto           typedef proto :DWORD, :DWORD
IMalloc_ReallocProto         typedef proto :DWORD, :DWORD, :DWORD
IMalloc_FreeProto            typedef proto :DWORD, :DWORD
IMalloc_GetSizeProto         typedef proto :DWORD, :DWORD
IMalloc_DidAllocProto        typedef proto :DWORD, :DWORD
IMalloc_HeapMinimizeProto    typedef proto :DWORD

IMalloc_Alloc                typedef ptr IMalloc_AllocProto
IMalloc_Realloc              typedef ptr IMalloc_ReallocProto
IMalloc_Free                 typedef ptr IMalloc_FreeProto
IMalloc_GetSize              typedef ptr IMalloc_GetSizeProto
IMalloc_DidAlloc             typedef ptr IMalloc_DidAllocProto
IMalloc_HeapMinimize         typedef ptr IMalloc_HeapMinimizeProto

IMalloc struct DWORD
      QueryInterface    IUnknown_QueryInterface  ?
      AddRef            IUnknown_AddRef          ?
      Release           IUnknown_Release         ?
      Alloc             IMalloc_Alloc            ?
      Realloc           IMalloc_Realloc          ?
      Free              IMalloc_Free             ?
      GetSize           IMalloc_GetSize          ?
      DidAlloc          IMalloc_DidAlloc         ?
      HeapMinimize      IMalloc_HeapMinimize     ?
IMalloc ends

invoke    (IMalloc PTR [eax]).Free,@stMalloc,@pidlParent
invoke    (IMalloc PTR [eax]).Release,@stMalloc

书上写的是个COM接口,用来实现选择目录的通用对话框
我不懂COM接口上面的那些看不懂不知道怎么写
我现在想把他用C++实现,上面那些代码要怎么写?
求教,顺便帮解释下COM接口之类的,谢了哈

作者: xuqiqw   发布时间: 2011-12-11

masm的宏汇编本类就和C语言结构类似

如函数声明
IMalloc_AllocProto typedef proto :DWORD, :DWORD
其实就是
IMalloc_AllocProto(DWORD,DWORD)
结构体也很清楚啊

作者: jackyjkchen   发布时间: 2011-12-11

引用 1 楼 jackyjkchen 的回复:
masm的宏汇编本类就和C语言结构类似

如函数声明
IMalloc_AllocProto typedef proto :DWORD, :DWORD
其实就是
IMalloc_AllocProto(DWORD,DWORD)
结构体也很清楚啊

externdef IID_IUnknown:IID这句
这个东西我换成extern IID IID_IUnknown没用额,别的文件也找不到有这个声明

作者: xuqiqw   发布时间: 2011-12-11

invoke (IMalloc PTR [eax]).Release,@stMalloc
还有这里的(IMalloc PTR [eax]).Release不清楚什么意思

作者: xuqiqw   发布时间: 2011-12-11

引用 3 楼 xuqiqw 的回复:

invoke (IMalloc PTR [eax]).Release,@stMalloc
还有这里的(IMalloc PTR [eax]).Release不清楚什么意思

这里貌似和虚函数表有关,不用去管寄存器的细节,只管调函数就行

作者: jackyjkchen   发布时间: 2011-12-11