问题就是扩展函数库的函数怎么向主程序进行注册。当然函数个数以及函数名可以容易知道。但主程序对DLL的中函数调用是要知道DLL中的函数原型,但我的系统主系统是不知道其函数原型的。
这个问题确实比较复杂,有没有Windows程序设计方面的高手能帮忙解决?
27 个解决方案
#1
几乎是不可能
#2
我知道有一个DLL函数导出程序,可以导出DLL文件的所有函数原型
你可以到华军上SEARCH看看
GOOD LUCK
你可以到华军上SEARCH看看
GOOD LUCK
#3
没有看见过
gz
gz
#4
那你可以让rundll32来调用,将危险送给他,
#5
不要浪费时间,向原厂商请求技术邦助,提供函数原型吧。
#6
反编译
#7
不要浪费时间,向原厂商请求技术邦助,提供函数原型吧。最好的途径了;
#8
#9
DELPHI自带的那个东西可以知道函数名
#10
主程序是我开发的,主要提供应用程序框架处理。先于扩展库发布/
而护展程序主要是对主程序的业务逻辑进行补充。可以是我开发,也可以是用户开发。扩展库的开发格式可以由我来定。可以在扩展程序中申明函数的一些详细信息,以及定义相应的接口信息。但关键是怎么来定义及引用。/
主程序不需要再重新编译。
这个问题对我很急需,有没有能解决的办法?
而护展程序主要是对主程序的业务逻辑进行补充。可以是我开发,也可以是用户开发。扩展库的开发格式可以由我来定。可以在扩展程序中申明函数的一些详细信息,以及定义相应的接口信息。但关键是怎么来定义及引用。/
主程序不需要再重新编译。
这个问题对我很急需,有没有能解决的办法?
#11
mark
#12
好办,扩展程序做成ExtXXX.DLL;要有命名规则,入口函数原型全部相同。
主程序用动态菜单,从ini文件读取扩展程序代号然后按命名规则找Ext???.DLL,
然后调用扩展程序入口函数。For Exsample:
Function fShowAppForm(hMainApp:THandle;pControlor:OleVariant;pCallBackFunction:TCallBackFunction):integer;SafeCall;Extend;
主程序用动态菜单,从ini文件读取扩展程序代号然后按命名规则找Ext???.DLL,
然后调用扩展程序入口函数。For Exsample:
Function fShowAppForm(hMainApp:THandle;pControlor:OleVariant;pCallBackFunction:TCallBackFunction):integer;SafeCall;Extend;
#13
是个好办法
#14
为什么不用com来实现?
#15
TO: zhangqiufk(真言)
我想我的应用还没有那么复杂,主要是一些业务处理函数,我想通过扩展库的形式来完成扩展业务。用户选择执行函数,并传入参数。就可以计算结果。
所以,对于这样的计算函数
Function 入库金额(帐套:Integer; 会计月: Integer; 库房:String): Double;
Function 销售总额(帐套:Integer; 会计月: Integer): Double;
对于不同的业务系统可以扩展不同的函数。
这些业务函数再注册到主系统中,从而主系统可提供给用户进行录入。能返回其值。
你说的怎么进行参数传递呢?
我想我的应用还没有那么复杂,主要是一些业务处理函数,我想通过扩展库的形式来完成扩展业务。用户选择执行函数,并传入参数。就可以计算结果。
所以,对于这样的计算函数
Function 入库金额(帐套:Integer; 会计月: Integer; 库房:String): Double;
Function 销售总额(帐套:Integer; 会计月: Integer): Double;
对于不同的业务系统可以扩展不同的函数。
这些业务函数再注册到主系统中,从而主系统可提供给用户进行录入。能返回其值。
你说的怎么进行参数传递呢?
#16
原来你是定规则的人!!!
这不就简单了吗?
你就把接口定义好,让用户的DLL导出一个统一的过程/函数不就行了?!!!!
这不就简单了吗?
你就把接口定义好,让用户的DLL导出一个统一的过程/函数不就行了?!!!!
#17
我想COM或许也是办法之一,但没有用过,不知道怎么处理/
他能达到上面的要求的吗?
他能达到上面的要求的吗?
#18
对,我就是定规则的,可以要求用户的扩展DLL按要求来写/ 导出统一的过程与函数?
但参数是不定的/ 这就是关键/
但参数是不定的/ 这就是关键/
#19
没弄明白,对于用户选择这个函数
Function 入库金额(帐套:Integer; 会计月: Integer; 库房:String): Double;
你的某个业务系统的函数原型是怎样的呢?你可否举个例子
Function 入库金额(帐套:Integer; 会计月: Integer; 库房:String): Double;
你的某个业务系统的函数原型是怎样的呢?你可否举个例子
#20
上面的解决办法我看到有些公司用过,不过现在那间公司放弃了这种方法,他们现在用Delphi的运行包bpl,我对这个挺有兴趣,但是就是具体的不懂,有高人能出来说说吗?
#21
关注!!!!
#22
其实,这与电子表函数有点类似;电子表处理程序可以由主程序进行处理/
但其中的业务处理主要是根据扩展库函数来进行。
在计算单元格时,用户就可以选择函数并计算。
但其中的业务处理主要是根据扩展库函数来进行。
在计算单元格时,用户就可以选择函数并计算。
#23
要获得这些扩展函数的原型不难,可以在注册函数的时候同时以一定的格式把函数的参数信息
也注册,或者干脆把这些函数定义为published函数,然后利用RTTI来获得他们的原型。但问题是,你的主程序怎样去理解这些参数应该传递什么值。
我建议你反过来,由你的主程序提供一个Provider对象给扩展函数,由扩展函数去从这个Provider取得自己执行所必需的数据和上下文,然后再返回。这样也许要好做一点。
只是个人看法
也注册,或者干脆把这些函数定义为published函数,然后利用RTTI来获得他们的原型。但问题是,你的主程序怎样去理解这些参数应该传递什么值。
我建议你反过来,由你的主程序提供一个Provider对象给扩展函数,由扩展函数去从这个Provider取得自己执行所必需的数据和上下文,然后再返回。这样也许要好做一点。
只是个人看法
#24
更正一下:
要获得这些扩展函数的原型不难,可以在注册函数的时候同时以一定的格式把函数的参数信息
也注册,或者干脆把这些函数定义为某一个特定类的published函数,然后利用RTTI来获得他们的原型。但问题是,你的主程序怎样去理解这些参数应该传递什么值。
我建议你反过来,由你的主程序提供一个Provider对象给扩展函数,由扩展函数去从这个Provider取得自己执行所必需的数据和上下文,然后再返回。这样也许要好做一点。
只是个人看法
要获得这些扩展函数的原型不难,可以在注册函数的时候同时以一定的格式把函数的参数信息
也注册,或者干脆把这些函数定义为某一个特定类的published函数,然后利用RTTI来获得他们的原型。但问题是,你的主程序怎样去理解这些参数应该传递什么值。
我建议你反过来,由你的主程序提供一个Provider对象给扩展函数,由扩展函数去从这个Provider取得自己执行所必需的数据和上下文,然后再返回。这样也许要好做一点。
只是个人看法
#25
你自己定好接口,让别人开发时都用你的接口
#26
up
#27
楼上的大侠们想得太复杂了,小弟有二个简单的办法:
一是:把参数规定 var 数组,在传递的时候是传递数组的地址的,DLL中可得到这个数组的全部数据
二是:加入ASM语句
把DLL的参数声明为空,然后根据有几个参数,执行几个push 参数,
最后来个call [pFun] 应该就可以了。
一是:把参数规定 var 数组,在传递的时候是传递数组的地址的,DLL中可得到这个数组的全部数据
二是:加入ASM语句
把DLL的参数声明为空,然后根据有几个参数,执行几个push 参数,
最后来个call [pFun] 应该就可以了。
#1
几乎是不可能
#2
我知道有一个DLL函数导出程序,可以导出DLL文件的所有函数原型
你可以到华军上SEARCH看看
GOOD LUCK
你可以到华军上SEARCH看看
GOOD LUCK
#3
没有看见过
gz
gz
#4
那你可以让rundll32来调用,将危险送给他,
#5
不要浪费时间,向原厂商请求技术邦助,提供函数原型吧。
#6
反编译
#7
不要浪费时间,向原厂商请求技术邦助,提供函数原型吧。最好的途径了;
#8
#9
DELPHI自带的那个东西可以知道函数名
#10
主程序是我开发的,主要提供应用程序框架处理。先于扩展库发布/
而护展程序主要是对主程序的业务逻辑进行补充。可以是我开发,也可以是用户开发。扩展库的开发格式可以由我来定。可以在扩展程序中申明函数的一些详细信息,以及定义相应的接口信息。但关键是怎么来定义及引用。/
主程序不需要再重新编译。
这个问题对我很急需,有没有能解决的办法?
而护展程序主要是对主程序的业务逻辑进行补充。可以是我开发,也可以是用户开发。扩展库的开发格式可以由我来定。可以在扩展程序中申明函数的一些详细信息,以及定义相应的接口信息。但关键是怎么来定义及引用。/
主程序不需要再重新编译。
这个问题对我很急需,有没有能解决的办法?
#11
mark
#12
好办,扩展程序做成ExtXXX.DLL;要有命名规则,入口函数原型全部相同。
主程序用动态菜单,从ini文件读取扩展程序代号然后按命名规则找Ext???.DLL,
然后调用扩展程序入口函数。For Exsample:
Function fShowAppForm(hMainApp:THandle;pControlor:OleVariant;pCallBackFunction:TCallBackFunction):integer;SafeCall;Extend;
主程序用动态菜单,从ini文件读取扩展程序代号然后按命名规则找Ext???.DLL,
然后调用扩展程序入口函数。For Exsample:
Function fShowAppForm(hMainApp:THandle;pControlor:OleVariant;pCallBackFunction:TCallBackFunction):integer;SafeCall;Extend;
#13
是个好办法
#14
为什么不用com来实现?
#15
TO: zhangqiufk(真言)
我想我的应用还没有那么复杂,主要是一些业务处理函数,我想通过扩展库的形式来完成扩展业务。用户选择执行函数,并传入参数。就可以计算结果。
所以,对于这样的计算函数
Function 入库金额(帐套:Integer; 会计月: Integer; 库房:String): Double;
Function 销售总额(帐套:Integer; 会计月: Integer): Double;
对于不同的业务系统可以扩展不同的函数。
这些业务函数再注册到主系统中,从而主系统可提供给用户进行录入。能返回其值。
你说的怎么进行参数传递呢?
我想我的应用还没有那么复杂,主要是一些业务处理函数,我想通过扩展库的形式来完成扩展业务。用户选择执行函数,并传入参数。就可以计算结果。
所以,对于这样的计算函数
Function 入库金额(帐套:Integer; 会计月: Integer; 库房:String): Double;
Function 销售总额(帐套:Integer; 会计月: Integer): Double;
对于不同的业务系统可以扩展不同的函数。
这些业务函数再注册到主系统中,从而主系统可提供给用户进行录入。能返回其值。
你说的怎么进行参数传递呢?
#16
原来你是定规则的人!!!
这不就简单了吗?
你就把接口定义好,让用户的DLL导出一个统一的过程/函数不就行了?!!!!
这不就简单了吗?
你就把接口定义好,让用户的DLL导出一个统一的过程/函数不就行了?!!!!
#17
我想COM或许也是办法之一,但没有用过,不知道怎么处理/
他能达到上面的要求的吗?
他能达到上面的要求的吗?
#18
对,我就是定规则的,可以要求用户的扩展DLL按要求来写/ 导出统一的过程与函数?
但参数是不定的/ 这就是关键/
但参数是不定的/ 这就是关键/
#19
没弄明白,对于用户选择这个函数
Function 入库金额(帐套:Integer; 会计月: Integer; 库房:String): Double;
你的某个业务系统的函数原型是怎样的呢?你可否举个例子
Function 入库金额(帐套:Integer; 会计月: Integer; 库房:String): Double;
你的某个业务系统的函数原型是怎样的呢?你可否举个例子
#20
上面的解决办法我看到有些公司用过,不过现在那间公司放弃了这种方法,他们现在用Delphi的运行包bpl,我对这个挺有兴趣,但是就是具体的不懂,有高人能出来说说吗?
#21
关注!!!!
#22
其实,这与电子表函数有点类似;电子表处理程序可以由主程序进行处理/
但其中的业务处理主要是根据扩展库函数来进行。
在计算单元格时,用户就可以选择函数并计算。
但其中的业务处理主要是根据扩展库函数来进行。
在计算单元格时,用户就可以选择函数并计算。
#23
要获得这些扩展函数的原型不难,可以在注册函数的时候同时以一定的格式把函数的参数信息
也注册,或者干脆把这些函数定义为published函数,然后利用RTTI来获得他们的原型。但问题是,你的主程序怎样去理解这些参数应该传递什么值。
我建议你反过来,由你的主程序提供一个Provider对象给扩展函数,由扩展函数去从这个Provider取得自己执行所必需的数据和上下文,然后再返回。这样也许要好做一点。
只是个人看法
也注册,或者干脆把这些函数定义为published函数,然后利用RTTI来获得他们的原型。但问题是,你的主程序怎样去理解这些参数应该传递什么值。
我建议你反过来,由你的主程序提供一个Provider对象给扩展函数,由扩展函数去从这个Provider取得自己执行所必需的数据和上下文,然后再返回。这样也许要好做一点。
只是个人看法
#24
更正一下:
要获得这些扩展函数的原型不难,可以在注册函数的时候同时以一定的格式把函数的参数信息
也注册,或者干脆把这些函数定义为某一个特定类的published函数,然后利用RTTI来获得他们的原型。但问题是,你的主程序怎样去理解这些参数应该传递什么值。
我建议你反过来,由你的主程序提供一个Provider对象给扩展函数,由扩展函数去从这个Provider取得自己执行所必需的数据和上下文,然后再返回。这样也许要好做一点。
只是个人看法
要获得这些扩展函数的原型不难,可以在注册函数的时候同时以一定的格式把函数的参数信息
也注册,或者干脆把这些函数定义为某一个特定类的published函数,然后利用RTTI来获得他们的原型。但问题是,你的主程序怎样去理解这些参数应该传递什么值。
我建议你反过来,由你的主程序提供一个Provider对象给扩展函数,由扩展函数去从这个Provider取得自己执行所必需的数据和上下文,然后再返回。这样也许要好做一点。
只是个人看法
#25
你自己定好接口,让别人开发时都用你的接口
#26
up
#27
楼上的大侠们想得太复杂了,小弟有二个简单的办法:
一是:把参数规定 var 数组,在传递的时候是传递数组的地址的,DLL中可得到这个数组的全部数据
二是:加入ASM语句
把DLL的参数声明为空,然后根据有几个参数,执行几个push 参数,
最后来个call [pFun] 应该就可以了。
一是:把参数规定 var 数组,在传递的时候是传递数组的地址的,DLL中可得到这个数组的全部数据
二是:加入ASM语句
把DLL的参数声明为空,然后根据有几个参数,执行几个push 参数,
最后来个call [pFun] 应该就可以了。