如何不通过外挂DLL的方式实现不同模块的动态加载和调用?(100)

  • 主题发起人 labixiaoxin
  • 开始时间
L

labixiaoxin

Unregistered / Unconfirmed
GUEST, unregistred user!
问题是这样的,比如有N多种不同厂家的设备,这些设备实现的功能相同,但实现功能的算法各不相同。所以我想建立N个程序模块,每个模块定义有相同名字的函数接口,但接口实现部分不相同,接口定义如下: 模块1:procedure aa
function bb: integer
function cc: integer
... function xx: integer
模块2:procedure aa
function bb: integer
function cc: integer
... function xx: integer
... 模块N:procedure aa
function bb: integer
function cc: integer
... function xx: integer
如果通过DLL实现,我想可以建立N个不同的DLL,每个DLL都有相同的函数接口,程序运行后,根据需要,调用其中一个模块入内存进行运用,程序里对函数调用名都有一样的,都是直接调用aa,bb,cc等函数。 问题是现在想不通过外挂DLL的方式实现。直接把这N个模块做在程序里,到时根据需要调某个模块入内存运行。请问怎样实现这个功能,谢谢
 
D

dark_power

Unregistered / Unconfirmed
GUEST, unregistred user!
既然不通过DLL,在程序主体内,就不需要也不可能同名了。反正要对设备进行识别和分辨,那就函数名字后加个厂商后缀标识好了,aaOEM1,aaOEM2,aaOEM3,...然后Case OEMID of:aaOEM1:;aaOEM2:;aaOEM3:;
 

白河愁

Unregistered / Unconfirmed
GUEST, unregistred user!
"直接把这N个模块做在程序里,到时根据需要调某个模块入内存运行"做在程序里,就由不得你调不调进内存了。程序一旦运行,所有模块就会自动调入。
 

无条件投降

Unregistered / Unconfirmed
GUEST, unregistred user!
首先是解决问题!搞得被题目忽悠了!策略模式解决把,做个接口.根据设备不同做不同的类,做个factory,根据配置文件选择不同的类来实现接口(或者你写程序自己判断)。over!给分给分
 
L

labixiaoxin

Unregistered / Unconfirmed
GUEST, unregistred user!
用Case OEMID of就惨啦,有N种不同模块,可能有几十种,这样每次都用CASE就太没有效率了。无条件投降的回答我一下看不懂,等我慢慢看下,谢谢
 
D

dark_power

Unregistered / Unconfirmed
GUEST, unregistred user!
首先,你把所有模块都封装到主文件中就非常没有效率,每次装载主程序都会加载所有模块。而且,最终,你还是用Case of。不信你试试,你总得有地方进行设备的分析和判断。用if,那你就太搞笑了。
 
X

xianjun

Unregistered / Unconfirmed
GUEST, unregistred user!
>>程序运行后,根据需要,调用其中一个模块入内存进行运用如果是同一个程序,那就没有所谓调入模块进内存的说法了。可以建个抽象类,然后具体实现都从这个类继承,要用哪个厂商的就创建那个厂商的类实例。
 
L

labixiaoxin

Unregistered / Unconfirmed
GUEST, unregistred user!
多人接受答案了。
 

Similar threads

S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部