佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1200|回复: 12

有可能Call Function from Data File?

[复制链接]
发表于 31-10-2008 01:48 PM | 显示全部楼层 |阅读模式
C programming.

我目前想到的概念是,想从data file里read data,然后depend on the data call to function needed。

请别叫我用Function tag,举例
switch(Function_Tag)
case 0x0001: functionA();
case 0x0002: functionB();

然后只要我把function tag write in data file, 然后read 出来compare 就可以run function。

这不是我想要得。

目前想到的是把function fix in 1 address,然后把address write in data file,然后read address and run the function refer to the function address。
但是,这可能吗?
你知道怎么做吗?

不然还有其他方法吗?
谢解答。
回复

使用道具 举报


ADVERTISEMENT

发表于 31-10-2008 09:22 PM | 显示全部楼层
试试看使用DLL吧。
回复

使用道具 举报

 楼主| 发表于 31-10-2008 10:36 PM | 显示全部楼层
原帖由 geekman 于 31-10-2008 09:22 PM 发表
试试看使用DLL吧。


给你榨到。
给你机会,说来听听如何?
回复

使用道具 举报

发表于 1-11-2008 11:12 AM | 显示全部楼层
如果你知道address,可以试试用pointer to function。
回复

使用道具 举报

发表于 1-11-2008 11:30 AM | 显示全部楼层
原帖由 yooworld 于 31-10-2008 10:36 PM 发表


给你榨到。
给你机会,说来听听如何?


我又没丢手榴弹,怎么会炸到你?

我一向不会把握机会,错过了。

我看了很多遍,还是不明白你到底想要达到什么样的效果,也不明白你要这么做的原因,但是可以肯定的是:
1)姑且默认你的程式的执行环境是windows或者linux,这些环境下,每次程式启动时,都不会得到相同的记忆体位址,所以根本不能够靠死记function address来达到你的目的。
2)你所举的第一个例子就是一般大家都使用的方法(至少根据我从你的要求里面所理解的就是这样),为何不要使用这个肯定能够达到你的目的的方法而要标新立异的另创奇方?请解释你的原因和目的,好让我们能够判断出一个正确的方法。

关于DLL,如果你的IDE是对应windows的,你可以从help file里面获得相关信息(Microsoft SDK Help->Win32 API Programmers' Reference).
回复

使用道具 举报

发表于 1-11-2008 04:40 PM | 显示全部楼层
就如#4 说的 ,function pointer 能解决了
回复

使用道具 举报

Follow Us
 楼主| 发表于 1-11-2008 07:12 PM | 显示全部楼层
原帖由 糯米鸡 于 1-11-2008 11:12 AM 发表
如果你知道address,可以试试用pointer to function。


就是想还有其他方法吗?
因为fix address是很危险和不可靠的。
回复

使用道具 举报

 楼主| 发表于 1-11-2008 07:18 PM | 显示全部楼层
原帖由 geekman 于 1-11-2008 11:30 AM 发表
我又没丢手榴弹,怎么会炸到你?

我一向不会把握机会,错过了。

我看了很多遍,还是不明白你到底想要达到什么样的效果,也不明白你要这么做的原因,但是可以肯定的是:
1)姑且默认你的程式的执行环境是w ...


application不会在电脑里,是其他东西,只要compile就可以得到address。
用case的坏处:
1。每次要加function,都会改到base code,然后recompile。
2。增加出错的机会。
回复

使用道具 举报


ADVERTISEMENT

发表于 1-11-2008 07:32 PM | 显示全部楼层
原帖由 yooworld 于 1-11-2008 07:12 PM 发表 就是想还有其他方法吗?因为fix address是很危险和不可靠的。
这不是fix不fix的问题, 而是如果你不知道address, 你要怎么call function?
回复

使用道具 举报

发表于 2-11-2008 12:22 AM | 显示全部楼层
你不可能把address 放成config file的啦。。
你的config file的 list of key value pairs 应该是 condition ->function name

你的程序必须 准备两个 hash table
一个是 function name -> function address
一个是 condition --> function name

base code 里会用 第一个hash table, 从 condition 找到 function name ,在用第二个 hash table ,用 function name 找到 function address 来执行。

所以 populating 这两个 hash table 的工作应该是另一个 libary code。。 你可以用 geekman所说的 dll 或 *nix 的 .so 。。这样就不用 compile base code upon 加新的function。。
回复

使用道具 举报

发表于 2-11-2008 09:13 AM | 显示全部楼层
可以试试用share memory
回复

使用道具 举报

发表于 7-11-2008 07:48 PM | 显示全部楼层
real time loading assembly... base on the setting in the file
回复

使用道具 举报

发表于 18-11-2008 11:29 PM | 显示全部楼层
我想问一下,楼主知道你到底希望达到什么吗?还是纯属消磨时间?
如果你想根据data来决定运行的function, 根本没必要搞到酱复杂吧?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 22-12-2025 10:15 PM , Processed in 0.141573 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表