当前位置:网站首页>PB的扩展DLL开发(超级篇)(七)
PB的扩展DLL开发(超级篇)(七)
2022-07-04 17:05:00 【lxbin2003】
PB的扩展DLL开发(超级篇)(七)
(PB史上第一次开放的开发技术)
对象实例化与销毁
假设有PB代码是这样:
uo_json js
js = create uo_json
DLL里实现同样的功能代码是:
OB_INST_ID obInstID = NULL;
if (rt_create_obinst(obThis, (LPTSTR)_T(“uo_json”), &obInstID) == 1)
{
//实例化成功
}
如果要把实例返回给PB
OB_DATA obReturn = {0};
OB_CLASS_HNDL hndl = ob_get_obinst_class_hndl(obThis, obInstID);
OB_CLASS_ID classID = hndl.class_id ; //得到其类型
ob_set_data_obinst(&obReturn, obInstID, classID, OB_INSTVAR_FIELD);
if(obInstID == NULL)
ob_set_info_nullval(obReturn .info, TRUE); //如果创建失败,是空值,要把NULL标志打上,这样在PB里用 isnull() 或 isvalid() 判断时会是 false
ot_set_return_val(obThis, &obReturn); //返回对象实例
其他可以对象实例化的函数还有:
ob_create_obinst
ot_create_obinst_with_name
ot_create_obinst_at_lval
ob_create_object
ob_create_object_using
有ot_开头的和ob_开头的函数,ot_开头的应该是runtime 类函数,比ob_开头要高级一些,建议尽量使用 ot_开头的函数。
一个对象实例后,返回给PB环境,可以显式的 destroy js,如果不写destroy代码,PB也会自动 销毁它。
DLL里可以自己销毁
ob_destroy_obinst(obThis,obInstID);
要注意, PB代码里并不知道你DLL里已销毁,会继续销毁,造成程序崩溃。所以,通常不需要调用ob_destroy_obinst这个销毁函数。
我在思考:这个销毁导致崩溃,应该跟引用计数有关系。只有当它的引用计数为0时,才会真正销毁。有个函数 rtDataCopy它的最后一个参数表示是否增加引用计数。如果是传入参数,我们可以用 rtDataCopy 复制一份自己用,用完可以ob_destroy_obinst,不会崩溃。可惜,我没找到在哪可以直接添加这个引用计数。有知道的请告诉我一下,我好把这个坑填一下。(*(DWORD*)((DWORD)obInstID + 24)) ++; 倒是可以实现计数增1,但总不敢用,还是有SDK 函数用起来更放心。
以上说的是不可视对象和实例化和销毁。至于可视化对象,还是在PB设计环境里用鼠标拖放吧,DLL里实现起来非常复杂,我也没掌握好,这里就不说了。
如果你对system library相关开发方式感兴趣,可到QQ群624409252共享里大自在的专用目录下下载DEMO。
边栏推荐
- 学习路之PHP--phpstudy创建项目时“hosts文件不存在或被阻止打开”
- VMware Tools和open-vm-tools的安装与使用:解决虚拟机不全屏和无法传输文件的问题
- How is the entered query SQL statement executed?
- Load test practice of pingcode performance test
- [cloud native] what is the "grid" of service grid?
- 【2022年江西省研究生数学建模】冰壶运动 思路分析及代码实现
- [HCIA continuous update] network management and operation and maintenance
- 【209】go语言的学习思想
- Li Kou brush question diary /day6/6.28
- 比李嘉诚还有钱的币圈大佬,刚在沙特买了楼
猜你喜欢
DB engines database ranking in July 2022: Microsoft SQL Server rose sharply, Oracle fell sharply
Mysql5.7 installation tutorial graphic explanation
I always thought that excel and PPT could only be used for making statements until I saw this set of templates (attached)
一直以为做报表只能用EXCEL和PPT,直到我看到了这套模板(附模板)
Unity 制作旋转门 推拉门 柜门 抽屉 点击自动开门效果 开关门自动播放音效 (附带编辑器扩展代码)
基于NCF的多模块协同实例
Improve the accuracy of 3D reconstruction of complex scenes | segmentation of UAV Remote Sensing Images Based on paddleseg
被忽视的问题:测试环境配置管理
Neglected problem: test environment configuration management
Li Kou brush question diary /day7/6.30
随机推荐
Load test practice of pingcode performance test
Digital "new" operation and maintenance of energy industry
华为云ModelArts的使用教程(附详细图解)
【211】go 处理excel的库的详细文档
. Net ORM framework hisql practice - Chapter 2 - using hisql to realize menu management (add, delete, modify and check)
Wireshark packet capturing TLS protocol bar displays version inconsistency
一直以为做报表只能用EXCEL和PPT,直到我看到了这套模板(附模板)
What if the self incrementing ID of online MySQL is exhausted?
vbs或vbe如何修改图标
力扣刷题日记/day1/2022.6.23
力扣刷题日记/day3/2022.6.25
6.26CF模拟赛B:数组缩减题解
力扣刷題日記/day6/6.28
TCP waves twice, have you seen it? What about four handshakes?
Li Kou brush question diary /day3/2022.6.25
Journal des problèmes de brosse à boutons de force / day6 / 6.28
Interpretation of SIGMOD '22 hiengine paper
DB-Engines 2022年7月数据库排行榜:Microsoft SQL Server 大涨,Oracle 大跌
With an estimated value of 90billion, the IPO of super chip is coming
[go language question brushing chapter] go conclusion chapter | introduction to functions, structures, interfaces, and errors