可以使用js的eval函数实现,示例如下:
<script type="text/javascript"> //自定义函数,用于d出三个参数的值 function alertFunc(str1,str2,str3){ alert(str1); alert(str2); alert(str3); } //自定义函数:根据传入的函数名,调用函数 function callAlert(functionName){ //根据函数名得到函数类型 var func=eval(functionName); //创建函数对象,并调用 new func(arguments[1],arguments[2],arguments[3]); } </script> <!--编写按钮,在点击事件中调用函数--> <button onclick="callAlert('alertFunc','tom','hello','world')" >测试函数调用</button>
VS(Visual Studio)导出所有函数名的目的是为了在开发过程中方便查看代码的结构和调用关系,以及进行代码分析和优化。导出的函数名可以被其他工具使用,比如静态分析工具、代码检查工具等,以辅助开发人员进行代码质量控制和性能优化。此外,导出的函数名也可以被用于生成API文档,以便其他开发人员参考和使用。
函数名很简单,导出表里写的明明白白,随便一个dll查看工具都可以读出,比如CFF explorer。但是对于参数,就像楼上说的那样,不能看出它真实的数据类型(即在高级语言中的抽象数据类型)。因为都编译成汇编了,没有抽象的概念了,此时只能知道数据大小。
但是,不代表就没有办法了。有个一软件叫IDA,专门用于静态分析,它可以反编译汇编成C的伪代码,从而大致能知道传入、传出了啥。如果再知道函数的功能的话,只要不是太复杂,分析出参数类型问题不大。
IDA反编译大概效果就是这样:void __fastcall Function(__int64 a1, __int64 a2, int a3, _QWORD a4)。这里只复制了个声明,但也可以看出,比晦涩的汇编容易读多了。注意上面写的数据类型只能当作参考,因为这些数据类型也是软件根据代码行为推测的。
argumentscallee 为指向自己的函数,可想相面这样实现递归的软编码,楼上说的ie不支持是ie不支持函数的name属性
function recursion() {aurumentscallee();
}
但是在 ES5 严格模式中这种方式不再被支持
使用:__FUNCTION__来获取,代码如下:
function get_array_count(array $array)
{
echo __FUNCTION__;
echo "<br/>";
return count($array);
}
echo get_array_count(array('3', '3'));
CHAR 可以先实例化一个StringBuilder然后可以传给char类型
关于其他的请参考msdn中的c++与c#的类型转换
对应关系如下:
C++ ---- C#
传入的char ----string
传出的char ---- StringBuilder(预分配空间)
short ----short
char ---- byte
char[n] ---- fixed byte[n]
结构指针 ----结构指针
函数指针 ---- 委托
里面涉及到函数指针,在C#里面用委托替代,总的代码如下:
delegate int pfunc(void dst,void src,int nSize);
unsafe public struct MyStruct
{
public Byte pMemory;//也可以用unsinged int替代(uint)
public pfunc myfunc;//这里用委托替代函数指针
public char[] rd;//声明的时候不能指定大小,可以在new的时候指定大小
}
以上就是关于如何获取到当前函数名和通过字符串调用函数全部的内容,包括:如何获取到当前函数名和通过字符串调用函数、vs导出所有函数名、如何查看DLL中的函数名及参数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)