如何定义入口地址固定的函数
如题,假使我打算把函数my()的入口固定在100H地址上,用C怎么实现?我还想调用my()函数时不直接调用my()而直接转到100H这个地址上,用C怎么实现?(C如果困难...
如题,假使我打算把函数my()的入口固定在100H地址上,用C怎么实现?我还想调用my()函数时不直接调用my()而直接转到100H这个地址上,用C怎么实现?(C如果困难用C嵌入汇编也可!)大侠帮帮忙吧!
事实上我是打算用turboC图形化编程来编写一个鼠标按钮程序,我现在已经实现初始化按钮,然后画按钮,这两个函数!
在按钮消息响应的时候我打算这么写:"while(1){消息响应();}"消息响应()这个函数循环搜寻是否有按钮按下,有则跳转到相应函数,如果函数入口地址固定,则我就可直接给指针变量赋值,叫程序直接跳转到相应函数,这样初始化按钮,画按钮,按钮消息响应这三个函数就可以永久不变,我可以把它生成一个lib,而我主函数仅仅在调用初始化按钮,画按钮,按钮消息响应后加上按钮1的任务函数,按钮2的任务函数,按钮3的任务函数,......便可,这些函数的入口地址便是系统提供的固定地址,换句话说有点像C51的中断函数.不知道怎么实现?如果您有更好的方法我们可以多多交流!谢谢!(操作系统DOS)
再补充一点儿,如果固定函数的入口地址不大可能实现,能不能获取函数的入口地址,我固定函数名,在系统运行之初获取相应函数地址,如果没有相应的函数,跳过这个函数!这个功能能不能实现!
回复catm3 我想知道:for(循环)if exist fun_i funs[i]=fun_i,这个伪码怎么实现? 展开
事实上我是打算用turboC图形化编程来编写一个鼠标按钮程序,我现在已经实现初始化按钮,然后画按钮,这两个函数!
在按钮消息响应的时候我打算这么写:"while(1){消息响应();}"消息响应()这个函数循环搜寻是否有按钮按下,有则跳转到相应函数,如果函数入口地址固定,则我就可直接给指针变量赋值,叫程序直接跳转到相应函数,这样初始化按钮,画按钮,按钮消息响应这三个函数就可以永久不变,我可以把它生成一个lib,而我主函数仅仅在调用初始化按钮,画按钮,按钮消息响应后加上按钮1的任务函数,按钮2的任务函数,按钮3的任务函数,......便可,这些函数的入口地址便是系统提供的固定地址,换句话说有点像C51的中断函数.不知道怎么实现?如果您有更好的方法我们可以多多交流!谢谢!(操作系统DOS)
再补充一点儿,如果固定函数的入口地址不大可能实现,能不能获取函数的入口地址,我固定函数名,在系统运行之初获取相应函数地址,如果没有相应的函数,跳过这个函数!这个功能能不能实现!
回复catm3 我想知道:for(循环)if exist fun_i funs[i]=fun_i,这个伪码怎么实现? 展开
10个回答
展开全部
你说的for,我看出来你已经知道存在那些功能,但是还不知道某个功能是不是被实现了,下面又是一个例子:
FUN funs[16]={fun1,NULL,fun3};//假设我们知道最多也就16个功能,但是目前只有功能0和2被实现,功能1和其他的3~15都还没有实现
for(...)
{
int funCode;
...
if(funs[funCode]!=NULL)//如果不是NULL,说明对应的功能号被实现了
funs[funCode](...)//调用
}
---------------------------------------------------------
楼主,C语言是不应该干这件事的!
楼主你的需求实际上可以这样描述:
1 怎样才能根据输入条件来调用不同的函数
2 条件和函数是一一对应的,但是函数在哪是不确定的,例如可能是其他函数传进来的。
我举个简单例子来解决你的问题
typedef void (*FUN)(...);//参数列表和返回值自己填
//定义一些功能函数
void fun1(...)
{
printf("1\n");
}
void fun2(...)
{
printf("1\n");
}
....
//上面的注意了,参数列表和返回值要一样的
FUN funs[]={fun1,fun2,...};//把函数的指针放进数组,就像你C51的向量区,存放了许多函数的地址,这里最终放的也是地址,只不过等程序编译好了才知道是多少,
...//一堆代码
int funCode;//用来存放计算出来的功能代码,例如0表示fun1,1表示fun2
...//一堆超级复杂而且重要且不可逃避的代码之后,funCode被设为了某个值,这个这个值实际上是我精心而且故意设计为理解简单的小玩意,代表某个功能的代码。
funs[funCode](...)//调用功能函数(知道funCode需要精心设计了吧,funCode为0就调用了fun1),当然你也可以把funs传到某个函数,然他也像这样使用传进去的函数。
FUN funs[16]={fun1,NULL,fun3};//假设我们知道最多也就16个功能,但是目前只有功能0和2被实现,功能1和其他的3~15都还没有实现
for(...)
{
int funCode;
...
if(funs[funCode]!=NULL)//如果不是NULL,说明对应的功能号被实现了
funs[funCode](...)//调用
}
---------------------------------------------------------
楼主,C语言是不应该干这件事的!
楼主你的需求实际上可以这样描述:
1 怎样才能根据输入条件来调用不同的函数
2 条件和函数是一一对应的,但是函数在哪是不确定的,例如可能是其他函数传进来的。
我举个简单例子来解决你的问题
typedef void (*FUN)(...);//参数列表和返回值自己填
//定义一些功能函数
void fun1(...)
{
printf("1\n");
}
void fun2(...)
{
printf("1\n");
}
....
//上面的注意了,参数列表和返回值要一样的
FUN funs[]={fun1,fun2,...};//把函数的指针放进数组,就像你C51的向量区,存放了许多函数的地址,这里最终放的也是地址,只不过等程序编译好了才知道是多少,
...//一堆代码
int funCode;//用来存放计算出来的功能代码,例如0表示fun1,1表示fun2
...//一堆超级复杂而且重要且不可逃避的代码之后,funCode被设为了某个值,这个这个值实际上是我精心而且故意设计为理解简单的小玩意,代表某个功能的代码。
funs[funCode](...)//调用功能函数(知道funCode需要精心设计了吧,funCode为0就调用了fun1),当然你也可以把funs传到某个函数,然他也像这样使用传进去的函数。
展开全部
函数入口地址应该是不能自己确定的,应该是编译或执行(由操作系统分配)时确定的,但你可以定义一个指针指向函数,然后在100h里存储这个指针来实现这个功能
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把函数my()的入口固定在100H地址上,不是靠编程来实现,而是要靠编译来实现
另外,你可以用函数指针来达到,跳转到固定地址,然后执行代码。
另外,你可以用函数指针来达到,跳转到固定地址,然后执行代码。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以用函数指针来达到,跳转到固定地址,然后执行代码。
在数学中,一个函数是描述每个输入值对应唯一输出值的这种对应关系,符号通常为f(x)。在英文中读作f of x,但在中文中则常读作fx。其中x为自变量,y=f(x)为因变量(或称应变量)。包含某个函数所有的输入值的集合被称作这个函数的定义域,包含所有的输出值的集合被称作值域。
在数学中,一个函数是描述每个输入值对应唯一输出值的这种对应关系,符号通常为f(x)。在英文中读作f of x,但在中文中则常读作fx。其中x为自变量,y=f(x)为因变量(或称应变量)。包含某个函数所有的输入值的集合被称作这个函数的定义域,包含所有的输出值的集合被称作值域。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我知道用const 可以声明一个常量,定义一个函数指针,让他的值等于100H,应该不行的,你参考下吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询