请你先解释一下什么叫做“配置”。
如果你的意思只是“调用”的话,应用程序中应该已经包含了Dll的调用信息。或者说Exe的作者已经知道了Dll的方法类型以及参数结构等。此外插件技术的实现方法有很多,比如说脚本或者Dll等。有些插件的本质就是Dll
如果你的意思只是“调用”的话,应用程序中应该已经包含了Dll的调用信息。或者说Exe的作者已经知道了Dll的方法类型以及参数结构等。此外插件技术的实现方法有很多,比如说脚本或者Dll等。有些插件的本质就是Dll
解决方案 »
- 请大家帮帮我
- 最近 我研究 搜索引擎 (五) 浏览器篇
- 请问如何在DBGrid的某一列中显示一个[按钮]?
- 请问有谁用Delphi7.0+SQL Server2000设计过“学生成绩管理系统”和“学生学籍管理系统”?
- 没分了, 也问一个简单的小问题, 一个快节键?
- 窗口控制问题:按下一个TForm对象的'最小','最大','X(关闭)',分别对应那个响应函数,如何使这些操作不产生效果?
- 在access中怎么判断一个一个字段的值是不是空?
- spreadsheet中文折行的问题,中文折行后为乱码
- 用Delphi如何实现Trace命令(100分送上)
- 关于安装时遇到的密码问题?
- 三层结构问题请教????????????????
- 三层结构问题???????????????????
To 数字蛋糕 插件好像对外的接口的类型是固定的吧!只是函数内部的功能不同罢了吧!这只是我个人的看法!
然后用@mypro:=getProcAddress(myhandle,'程序名')其中文件名和程序名都是字符串,都可以在配置文件中取.
但是注意的是程序的参数必须一致.
procedure Proc_play;
Type
TDllfunc =Procedure(Params:intger);stdcall; //---->注意这个地方!
var
hLib: THandle;
FPointer: TFarProc;
DllFunc: TDllfunc;
begin
hLib := LoadLibrary(PChar('xxx.dll'));
if hLib > 0 then
try
FPointer := GetProcAddress (hLib,PChar('myproc'));
if FPointer <> nil then
begin
DllFunc := TDllFunc(FPointer);
DllFunc();
end
else ShowMessage ('失败!');
finally
FreeLibrary (hLib);
end
else
ShowMessage ('执行【经纪人话务统计】功能失败!');
end;上面注意的地方是,你所谓要动态调用的函数还是要声明函数结构的!
你能做到不在程序中声明就调用吗?就是要把声明作为一个字符串进行定义。
这也是我想不通的地方!
那个高手能帮小弟搞明白吗?
if FPointer <> nil then
begin
DllFunc := TDllFunc(FPointer);
DllFunc(10);
end
知道吗?差不多的原理吧
有气无力的抬头看了看
又垂着头,无精打采的出去了
众人回头看时
依稀见他肩头扛着一块大木牌
上面似乎写着:
关 注
你只要传入函数名称和相应的参数就可以了。
能给我发一个例子吗?不管是什么写的都行!拜托啦!
我的mail 是[email protected]我一定加分!
type
TMyProcedure = procedure(A,B: Integer); cdecl;然后:procedure tform1.buttonclick(sender: TObject);
var
handle: Integer;
Proc: TMyProcedure;
begin
handle := LoadLibrary(Edit1.Text); //Dll 的名字。 if handle <> 0 then
proc := GetAddress(handke, 'AAA'); if Proc <> nil then
Proc(i, j);
end;
这样,只要这个Dll里面声明了一个叫做AAA的函数,参数和调用规则都和你的程序里设定的
一样,那么,任何的Dll都可以调用,只要知道名字。大意如此,代码也只是示例,呵呵,错误之处,在所难免。请见谅。
因为Windows的DLL的关系,你需要在不同版本的Windows下编译一遍才能运行?大概20年前,程序就做的了可以共享函数库了,现在更是先进一步,有了Com Corba等等
技术,
大家还在为这么个问题讨论这么久?
那么多的win32头文件了。com的接口方式跟dll的完全不同机理