下面是演示代码():
/* Typedef to hold class details */
typedef struct {
char *signature;
int count;
int space;
} ClassDetails;
....
/* Tag this jclass */
err = (*jvmti)->SetTag(jvmti, classes[i], (jlong)(ptrdiff_t)(void*)(&details[i]));
SetTag的原型是jvmtiError SetTag(jvmtiEnv* env, jobject object, jlong tag)
.
我可以这样用吗?err = (*jvmti)->SetTag(jvmti, classes[i], (jlong)(&details[i]));
?
当使用指针类型的标记时,使用ptrdiff_t(用于保存指针差异的整数的标准C类型定义)强制转换为以避免编译器警告和错误。永远不要使用int或long,你会发现int和long并不总是大到足以容纳一个指针,截断你的地址,其中ptrdiff_t总是大到足以容纳指针的所有位。详细信息在这里JVMPI转换到JVMTI