Events 如何在FoxPro中指定COM事件回调?

Events 如何在FoxPro中指定COM事件回调?,events,com,callback,foxpro,mappoint,Events,Com,Callback,Foxpro,Mappoint,我已经很多年没有用FoxPro做任何事情了,但我有一个遗留系统需要改进。好的,我可以从FoxPro调用基于COM的应用程序,如MapPoint或Excel。我以前做过。但是,如何将函数或对象方法作为事件回调传递? 有可能吗?(我在网上找不到任何东西,也找不到我设法找到的FoxPro书籍) 以下是我的意思的VB6示例,摘自MapPoint文档。碰巧,OnConnection()本身就是一个回调;但是对moaApp.AddCommand()的调用将回调函数(SayHello())的引用作为菜单回调传

我已经很多年没有用FoxPro做任何事情了,但我有一个遗留系统需要改进。好的,我可以从FoxPro调用基于COM的应用程序,如MapPoint或Excel。我以前做过。但是,如何将函数或对象方法作为事件回调传递? 有可能吗?(我在网上找不到任何东西,也找不到我设法找到的FoxPro书籍)

以下是我的意思的VB6示例,摘自MapPoint文档。碰巧,
OnConnection()
本身就是一个回调;但是对
moaApp.AddCommand()
的调用将回调函数(
SayHello()
)的引用作为菜单回调传递给MapPoint(
moApp
)。 这与问题无关,但我可能需要捕获Save、Quit和Menu回调事件

Dim moaApp As MapPoint.Application
Public Sub SayHello()
MsgBox "Hello"
End Sub

Private Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal ConnectMode As
AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)
On Error GoTo error_handler

Set moaApp = Application

'Add this command to the menu (HOW DO I DO THIS IN FOXPRO?)
moaApp.AddCommand "Saying Hello", "SayHello", Me

Exit Sub

error_handler:

MsgBox Err.Description

End Sub

多亏了@Alan B的领导,我成功地让它工作了

通过创建实现所需事件接口的COM类来捕获事件。接口中的所有事件都必须实现,尽管它们可以是空的实现

例如

也可以传递方法(例如,对于菜单项),但这些方法不能传递给同一个类。您需要为每个要实现的事件处理程序接口实现一个类,以及一个单独的类来处理菜单回调

下面是一个带有菜单项的示例:

&& Create a menu handler
oMyMenu = CREATEOBJECT("MapPointMenuHandler") 

&& Add our Tools menu entries and hook them up
oMyMapPointApp.AddCommand("Custom Menu Item", "MyMenuCallBack", oMyMenu)


&& This class implements the Tools menu callbacks
&& *** NOTE: MessageBox will appear UNDER MapPoint

DEFINE CLASS MapPointMenuHandler AS Session OLEPUBLIC 

   PROCEDURE MyMenuCallback()
      MESSAGEBOX("Main Menu callback")
   ENDPROC  

ENDDEFINE  

您看过Visual FoxPro Eventhandler()函数了吗?谢谢-通过快速搜索,它似乎可以实现我想要的功能(需要阅读更多内容)。我假设这是后来添加的,因为我这里的Microsoft新闻手册中没有它。它可能只是在7或8或其他版本中添加的-请确保您使用的是Visual FoxPro 9 SP2。EVENTHANDLER()是在VFP 7中添加的。
&& Create a menu handler
oMyMenu = CREATEOBJECT("MapPointMenuHandler") 

&& Add our Tools menu entries and hook them up
oMyMapPointApp.AddCommand("Custom Menu Item", "MyMenuCallBack", oMyMenu)


&& This class implements the Tools menu callbacks
&& *** NOTE: MessageBox will appear UNDER MapPoint

DEFINE CLASS MapPointMenuHandler AS Session OLEPUBLIC 

   PROCEDURE MyMenuCallback()
      MESSAGEBOX("Main Menu callback")
   ENDPROC  

ENDDEFINE