对接真的是既枯燥又无聊,15组接了一遍很多也是重复工作,泛泛谈来心得也无非是统一接口,要认真仔细的做好约定,在此简单记录下过程。
和第一组试着对接的时候对对接一无所知,当时上网查到了隐式调用与显式调用,明显隐式简单,三下五除二写好了,发现调用的函数在编译时显示未定义。检查了好多遍保存dll,lib,和h的位置,又上网查了好多,也没什么结果。问了另一组相同的想法却可正常的调用,一度怀疑是core组的问题,跟他们说了他们就一直在说自己没问题。导致两组差点吵起来。所以,对接的最大困难是在经验不足时,出现对接失败无法确定是谁的责任,让对方检查对方只是一再强调程序在他们的电脑上测试正常。而我们这边,由于知识经验资料的欠缺,只能说我们按教程做的,很多教程都是这么说的 ,也不是我们的错误,然后陷入死结。
后来不停的搜资料终于在一篇博文里提到:MinGW编译器不能隐式调用,发现这个问题后立刻改用显式,写完后依旧失败。调试显示能连接上库,但连接不上函数。连接不上函数肯定是函数的问题啊,于是第一次的情景再次上演,对面无奈的写了一个文件操作后甩锅了,我们这边肯定没问题。我们没把法继续在网上一顿乱搜,原来生成dll时函数名在编译过程会被改变,于是我们用了depends读文件中的函数名,终于成功了。
说来为什么要用文件操作,因为最初我们写ui的时候历史记录等都是保存在文件中,所以自然而然想到文件也可以用来最初写入题目啊,不过很多core组不写文件操作,说什么占内存之类的,所以没写文件的都放到最后接了。第一组对接成功已经用了三天了。
有了第一组的经验,又接着接了三组应我们要求写了文件操作的乖宝宝。这个过程说顺利也不顺利,我们这边算是轻车熟路,唯一痛苦之处在于不停的读函数名字,很痛苦。所以建议core组的接口函数个数应尽可能少。虽然有可能带来参数过多的问题,但可以用结构体等避免,不然对显示调用的组来说,很难受。建议qt一开始就装vs的编译器吧。或者有哪位大佬知道编译时不改变名字的方法,欢迎指教。
这三组问题出现在他们自己身上,有的组函数本身出现了死循环,有的组忘了随机数种子导致每组题目都一样,有的组同时设了操作数范围和结果范围两个参数,导致彼此相互矛盾。所以core组在提交dll时一定要确保自己多次检查后程序无误,不然ui组总会怀疑自己的操作出了问题从而浪费大量时间用来查错。
接下来还遇到过头文件运用了vs最新版本的tostring导致qt无法编译,类不知怎么调用的各种问题,后来的几乎就是在重复读出来自己动手写到文件里去的操作。所以说接口还是统一吧,不统一的话建议core组多写几种接口。群里多次在说,很多ui组也都在用的接口方式,你就是不写,我认为这样的core组是不合格的。
以上。