- 主题:C语言是怎么处理反射需求的?
对。我们实际的函数,要加两个参数:结构说明书,或叫做TEMPLATE。选择器choose。
在TEMPLATE里告诉你每个成员的名字,类型,长度,位置。
choose: "名字,名字,名字",NULL取全部成员。。
【 在 gluon521 的大作中提到: 】
: 首先你得知道函数是干嘛的,输入参数都是啥东西,输出是啥,否则没法弄。
: 哪怕你用反射,你也得知道属性或者方法的名字,变量类型和个数吧。
: 不然给你一堆,你也不知道用哪个,怎么用。还是得一个个试。
: ...................
--
修改:ylh1969 FROM 221.221.51.*
FROM 221.221.51.*
已经搞出来啦,用了十几年了。
我是在答,不是问。
【 在 gluon521 的大作中提到: 】
: 看来你这问题略复杂,估计光靠问是没法得到结果的。
: 你得找个做逆向有经验的人帮你搞,这样快一点。
: 或者自己慢慢去摸索,如果不着急的话。
: ...................
--
修改:ylh1969 FROM 221.221.51.*
FROM 221.221.51.*
重新反序列化到它的对象里,或直接使用json。
【 在 il15 的大作中提到: 】
: 嗯,多谢!我大致理解了。
: 还有个问题(结合我之前听说的一些java的皮毛),这个需求 是不是相当于通过网络传一个文件,然后别的机器拿到这个信息后,重新编译?
:
--
FROM 221.221.51.*
这里边最难的是位置,就是成员相对结构头的偏移量。
这个不能让你写,不同的编译器对齐规则不同。
在模板第一次被使用时,要自动算出来。
以后的使用就很简单了
p = struct_p + t->offset; //找到了变量的位置。效率很高,几乎与用成员名访问效率相同。
【 在 gluon521 的大作中提到: 】
: 看来你这问题略复杂,估计光靠问是没法得到结果的。
: 你得找个做逆向有经验的人帮你搞,这样快一点。
: 或者自己慢慢去摸索,如果不着急的话。
: ...................
--
修改:ylh1969 FROM 221.221.53.*
FROM 221.221.51.*
举个例子:
访问关系数据库时,一个表结构可以对应一个struct。
客户端需要下载部分数据表,在开发初期,并不能完全确定。
能否写一个服务,只要客户端提出要下载的表名,服务器就能够序列化并下载其内容,并反序列化到本地struct数组,作为本地数据库使用。
表名是运行时提供的,服务器对应的服务,在编译期是不知道会提出什么struct的。
或者反过来,客户端运行时需要上传一些struct给服务器,也是编译期不清楚,运行时才来的。
就算是同样的struct,在不同系统间,布局也可能是不同的,就需要序列化反序列化来处理。
【 在 flw 的大作中提到: 】
: 这么说也对。
: 但这并不是说反射就绝对不可行。
: 其它语言的许多概念在 C 里面都是可以模拟出来的。
: ...................
--
修改:ylh1969 FROM 221.218.61.*
FROM 221.218.61.*
有这个需求,见楼上。
不用反射,你有啥高招?
【 在 siegfried415 的大作中提到: 】
: C语言作为一门严格的编译语言,其核心的逻辑是结构体的长度必须在编译期得到确定,所以根本不存在在动态语言的那种在运行期询问某个语言实体的类型那样的需求。。。
:
--
FROM 221.218.61.*
对,见44楼。
【 在 nikezhang 的大作中提到: 】
: 手撸内存模拟反射?
--
FROM 221.218.61.*