FME的新格式plugin并不是那么容易的。
首先说调试吧。在帮助文档和readme文本中说的信誓旦旦的,可以通过插件附加fme平台进行调试。这种调试方法大家都会,也并不神奇。可是在实际过程中,tfs_fixedSchema.dll中设置好满满的断点,可是一运行,这些断点全失效。可是明明看到这些代码都运行,弹出了自己设置的消息。难道是dll没怎么设置好?左弄右弄,请高手帮忙,还是无效。虽然知道这些插件是运行时调用又运行时释放,但是还是不能解释断点为什么无效。不能调试,直接影响就是不能直接了当的了解整个运行机制。只能凭着自己在运行代码中嵌入语句来跟踪分析了。
为了解决调试问题,也想了其它的方法。将VC8中的那个dll改造成VC6的dll,这样简单又趁手。外国人不爱用MFC,可见看出他们程序设计的历史,既悠久经验丰富,又归于正途气势磅礴。一切弄好,结果发现在源代码中一个语法调试不过。在VC6中不支持普通类的成员模板函数,而tfs例子中加入了这一功能支持。真是功亏一篑。
后来干脆另起炉灶,重新开发自己的读写插件来测试。现在回想,这条路还是荆棘坎坷的。
发现了版本问题。FME每个版本都有一个版本号,每个插件dll都要返回版本号。只有版本号一致的插件才能在FME平台中运行。这个版本的实现方法比较简单。基本上是FME提供底层版本的SDK,里面包含当前版本号,每个插件不用改代码重新编译一遍即可。这不是问题的关键,用简单的方法解决就行了,不深究。
想做的这个插件,先是空的,实际的打开关闭读写都不做任何事,只是返回一些消息,告知目前正在做什么事。按照例子封装好了接口,编译通过。
运行时发现很多问题。加入formatinfo\MyTest.db来声明类型,Copy过去MyTest.dll,在Workbench中浏览数据时可以找到自己定义的后缀类型,但是选中数据后并不能正常运行。提示差“metafile\MyTest.fmf”文件。在那里发现“tfs_fixedschema.fmf”。打开发现就是文本文件,里面有一些设置,不是很清楚语法。Copy重命名为MyTest.fmf,再运行,发现仍找不到。参照tfs_fixedschema.fmf,改改里面的配置,可能涉及到schemas\*.sch。忽略,可以正常运行了。可是运行过程中发现无穷占据内存。结合代码消息调试,发现openreade成功,但是Init api后就陷入了死循环,都没有来得及readfeature。看来还是那个fmf语法有问题。
今天的探索就到此裹步不前了。网上找相关东西还是找不到。没有正版支持,遗憾啊:)
另外说一句,最后还试验了在VC6 dll中仍不能调适。放到FME 2006GB中也不能调试。看来今天的问题一个都没有解决的。
评论