Show/Hide Toolbars

XSharp

 

如果接口方法有 CLIPPER 调用约定,而实现没有该约定,或相反的情况发生,则会抛出此错误。

 

这种情况通常发生在接口声明的程序集中,编译器选项 /vo5(隐式 CLIPPER 调用约定)的设置与实现接口的程序不同。

假设在一个程序集中有以下代码:

// compiled with /vo5-
INTERFACE IProvider
  METHOD DoSomething() AS VOID
END INTERFACE

而在另一个程序集中的实现方式是

// compiled with /vo5+
CLASS MyProvider IMPLEMENTS IProvider
  METHOD DoSomething() AS VOID
     ? "Done"
END INTERFACE

初看该方法的实现过程,似乎没有问题,但由于编译时使用了 /VO5,因此该方法的实际编译过程如下:

CLASS MyProvider IMPLEMENTS IProvider
  METHOD DoSomething(aArgs PARAMS USUAL[]) AS VOID
     ? "Done"
END INTERFACE

通过这样的写法,我们一眼就能看出,其实现与接口中的定义截然不同