如果接口方法有 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
通过这样的写法,我们一眼就能看出,其实现与接口中的定义截然不同