绝对简单的一段source: b:=tbitmap.create; b.width:=9; //这个就出错了! b:height:=9;
没错,就是改变一个空的tbitmap对象的尺寸,在win32下没问题、linux下没问题,在 android的例子androidlcltest里没问题,就是自己开一个空的dll project有问题!!! 但,在resize前,如果有内容就不会出错,比如b.Assign(a)或loadfromfile...!!! 但是这样效率要低点!!
不能不说这样防不胜防的陷阱还是挺吓人的,根据出错log根本不知道哪个语句出错,只是简单一句Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1) ... 因为是在android系统,根本没得在线调试。。
不过经过一上午各种对比编译开关、对比代码,终于找出原因了: dll要编译成android的JNI调用模式,如果要用到图形处理,必须要加上Interfaces单元,否则就会有上述错误!! 而我这个project加了Interfaces单元后又是各种unit找不到,最后在other unit files 里面加上这两个搜索路径就可通过: $(LazarusDir)\lcl\interfaces\customdrawn;$(LazarusDir)\lcl\interfaces\customdrawn\android
|