首页 / C++ / 通过PDB文件实现非嵌入式的c++反射
通过PDB文件实现非嵌入式的c++反射
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了通过PDB文件实现非嵌入式的c++反射,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1851字,纯文字阅读大概需要3分钟。
内容图文
![通过PDB文件实现非嵌入式的c++反射](/upload/InfoBanner/zyjiaocheng/501/8b26eecce7dd41f09f017aa906527b3b.jpg)
2、对基本数据的get/set
//get instance data member CReflObject *refl_obj_bar_c; refl_mgr.GetReflObjectFromParent(refl_obj_bar, L"c", &refl_obj_bar_c); CReflValue refl_val_bar_c; refl_mgr.GetClassInstDataMember(&bar, refl_obj_bar_c, &refl_val_bar_c); printf("%d\n", refl_val_bar_c.m_Data.m_I8); //set instance data member CReflObject *refl_obj_bar_i; refl_mgr.GetReflObjectFromParent(refl_obj_bar, L"i", &refl_obj_bar_i); CReflValue refl_val_bar_i; refl_val_bar_i.m_Data.m_I32 = 1024; refl_mgr.SetClassInstDataMember(&bar, refl_obj_bar_i, &refl_val_bar_i); printf("%d\n", bar.i);
3、调用函数
//函数 CReflObject *refl_obj_func1; refl_mgr.GetReflObjectFromGlobal(L"TestCallFunc1", &refl_obj_func1); refl_mgr.PrintReflObject(refl_obj_func1); std::vector<ffi_obj> vargs; ffi_obj arg1; arg1.type = ffi_type_sint32; arg1.value.i32 = 2014; vargs.push_back(arg1); ffi_obj arg2; arg2.type = ffi_type_pointer; arg2.value.p = (void*)"hello world"; vargs.push_back(arg2); ffi_obj ret; ret.type = ffi_type_void; refl_mgr.CallReflObject(refl_obj_func1, vargs, ret);
当然demo是不完整的,目前我认为还有就几个未解决的比较重要的问题是:
(1)处理对函数的不正确的调用。比如传入了错误的参数、返回值类型指定错了等。这部分cpython的libffi_msvc也没有做好,它做的仅仅是在windows下检测函数调用前后堆栈寄存器的位置是否一致,详见此处。但是仅有这个检测是不够的,它并不能有效的防止崩溃问题。我认为最好能做到能对参数、返回值进行类型检查,如果发现错误能打印错误,并且不进行函数的调用操作。
(2)如何在linux gcc环境下实现。
参考资料:
1、Reflection in C++ - a teaser
通过PDB文件实现非嵌入式的c++反射
标签:str 剪裁 加载 ase 工作 pos 获得 \n 定位
本文系统来源:https://www.cnblogs.com/adinosaur/p/9787057.html
内容总结
以上是互联网集市为您收集整理的通过PDB文件实现非嵌入式的c++反射全部内容,希望文章能够帮你解决通过PDB文件实现非嵌入式的c++反射所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。