잡동사니/Go lang

Go in Windows - Interface

밝은영혼 2020. 1. 5. 23:04

Go언어에서 윈도 인터페이스를 구현하는 경우 매개 변수의 형식은 uintptr 또는 이와 같은 크기의 변수(int,uint,포인터)만 가능하다.

HRESULT Invoke(
  DISPID     dispIdMember,
  REFIID     riid,
  LCID       lcid,
  WORD       wFlags,
  DISPPARAMS *pDispParams,
  VARIANT    *pVarResult,
  EXCEPINFO  *pExcepInfo,
  UINT       *puArgErr
);

위의 경우를 Go언어에서 구현하면, 아래와 같은 형태가 된다.

func Invoke(idMember int,riid *GUID,lcid uint,flags uint,
			dispParams *DISPPARAMS,varResult *VARIANT,
			excepInfo *EXCEPINFO,argErr *uint32) uintptr {
}

원래는 아래처럼 되어야 하지만 제대로 실행되지 않고 비정상 종료된다.

매개변수가 OS에 따라서 32bit 또는 64bit 크기로 정렬되어야 하는 것으로 보인다.

func NotWorkingInvoke(idMember int32,riid *GUID,lcid uint32,flags uint16,
			dispParams *DISPPARAMS,varResult *VARIANT,
			excepInfo *EXCEPINFO,argErr *uint32) uintptr {
}