After some more fiddling about, I got it to work with this code (below)
Pressing the first button works
Pressing the second button closes the app
'Ribbon
Include "mapbasic.def"
Include "IMapInfoPro.def"
Include "Enums.def"
Dim mapinfoApplication As This
Dim Ribbon As This
Dim RibbonTabColl As This
Dim RibbonTab As This
Dim ribbonGroupsColl As This
Dim ribbonGroup As This
Dim groupControlColl As This
Dim button1 As This
Dim button2 As This
Declare Sub Main
Declare Sub Button1Sub
Declare Sub EndHandler
Declare Sub GoodBye
Sub Main
mapinfoApplication = SystemInfo(SYS_INFO_IMAPINFOAPPLICATION)
Ribbon = GetRibbon(mapinfoApplication)
RibbonTabColl = GetTabsColl(Ribbon)
RibbonTab = RbnTabCollAddStrStr(RibbonTabColl,"TabID","Tab Name")
ribbonGroupsColl = GetRbnTabGrps(RibbonTab)
ribbonGroup = RbnCtrlGrpCollAddStrStr(ribbonGroupsColl,"GroupID","Group Name")
groupControlColl = GetRbnCtrlGrpCtrls(ribbonGroup)
button1 = MICtrlCollAddStrStrInt(groupControlColl,"Button1ID","Button Name",ControlType_Button)
Call SetRbnBtnCtrlIsLarge(button1,TRUE)
Call SetRbnBtnCtrlCallingHandler(button1,"Button1Sub")
button2 = MICtrlCollAddStrStrInt(groupControlColl,"Button1ID","Good Bye",ControlType_Button)
Call SetRbnBtnCtrlIsLarge(button2,TRUE)
Call SetRbnBtnCtrlCallingHandler(button2,"GoodBye")
End Sub
Sub Button1Sub
Note "Pressed button1"
End Sub
Sub GoodBye
Print "GoodBye"
End Program
End Sub
Sub EndHandler
Dim bRemoved As Logical
Print "EndHandler activated"
bRemoved = MICtrlCollRemove(groupControlColl,button1)
button1 = NULL_PTR
bRemoved = MICtrlCollRemove(groupControlColl,button2)
button2 = NULL_PTR
bRemoved = RbnTabCollRemove(RibbonTabColl,RibbonTab)
RibbonTab = NULL_PTR
End Sub