我有一个 .Net COM 服务器,它有一个将消息和延迟作为参数的方法。延迟之后,它会触发一个事件,将消息发送回客户端。
它适用于 .Net 和 VB6 客户端。
为了在 FoxPro 中绑定 COM 事件,您必须在 foxpro 中创建一个实现事件接口的类并将其连接起来,如下所述: http ://www.west-wind.com/presentations/dotnetfromVfp/ DotNetFromVfp_EventHandling.asp
我有这样一堂课:
DEFINE CLASS ComEventHandler AS session OLEPUBLIC
IMPLEMENTS IComServerEvents IN "PcaTest.ComServer"
* "C:\ComTest\PCATest.tlb"
PROCEDURE IComServerEvents_TimerExpired(message AS STRING) AS VOID
* add user code here
?message
ENDPROC
ENDDEFINE
以及将其连接起来的代码:
loMM = CREATEOBJECT("PcaTest.ComServer")
loEvents = CREATEOBJECT("ComEventHandler")
EventHandler(lomm, loevents)
当我运行此代码时,我得到 Type Library PcaTest.ComServer not found。但是,如果我将 implements 行更改为:
IMPLEMENTS IComServerEvents IN "C:\ComTest\PCATest.tlb"
我无法硬编码 tlb 的位置。
实际上,"CREATEOBJECT("PcaTest.ComServer")" 行工作正常,如果我不尝试实例化 ComEventHandler 对象,则该 COM 对象将被实例化,我可以调用它的方法并访问它的属性。事件处理程序类(大部分)仅在我向它提供 .tlb 而不是 progId 时才起作用。
.Net COM 服务器在 GAC 中注册。我已经尝试过使用和不使用 /codebase 以及使用和不使用 /tlb 或 /tlb:filename.tlb 的 regasm
我确实有一次在测试中工作过,或者看起来是这样。我现在无法复制这些结果,但是当我让它工作时,我使用了 /codebase 和 /tlb:filename.tlb。