某个个TPopupMenu位于dll中,用这样一个record封装起来:
TModule = record
Name:PChar;
TrayMenu:TMenuItem;
end;dll中的调用接口为: function GetInfo:TModule;stdcall;export;
begin
Result.Name := 'Demo';
Result.TrayMenu := FrmMain.pm1.Items;
end;dll入口: begin
FrmMain:=TFrmMain.Create(nil);
end.到主程序里加载dll,主程序是MDI Form。 type
pGetInfo=function():TModule;stdcall;procedure LoadMod(DllPath:PChar);
var Hnd:THandle;
FItem:TMenuItem;
GetInfo:pGetInfo;
Info:TMoudle;
begin
Hnd:=LoadLibrary(DllPath);
if Hnd<>0 then begin
GetInfo:=GetProcAddress(Hnd,'GetInfo');
if Assigned(GetInfo) then begin
Info:=GetInfo;
FItem:=Info.TrayMenu;
FItem.Caption:=Info.Name;
FrmMain.P2.Add(FItem); // P2是某个TPopmenu中的一项
end;
end;
end;
情况是,在主窗体中无法响应新菜单项的事件,而这个菜单又确实是Dll中的指定菜单。
个人是黔驴技穷了,到这里求解决办法!
TModule = record
Name:PChar;
TrayMenu:TMenuItem;
end;dll中的调用接口为: function GetInfo:TModule;stdcall;export;
begin
Result.Name := 'Demo';
Result.TrayMenu := FrmMain.pm1.Items;
end;dll入口: begin
FrmMain:=TFrmMain.Create(nil);
end.到主程序里加载dll,主程序是MDI Form。 type
pGetInfo=function():TModule;stdcall;procedure LoadMod(DllPath:PChar);
var Hnd:THandle;
FItem:TMenuItem;
GetInfo:pGetInfo;
Info:TMoudle;
begin
Hnd:=LoadLibrary(DllPath);
if Hnd<>0 then begin
GetInfo:=GetProcAddress(Hnd,'GetInfo');
if Assigned(GetInfo) then begin
Info:=GetInfo;
FItem:=Info.TrayMenu;
FItem.Caption:=Info.Name;
FrmMain.P2.Add(FItem); // P2是某个TPopmenu中的一项
end;
end;
end;
情况是,在主窗体中无法响应新菜单项的事件,而这个菜单又确实是Dll中的指定菜单。
个人是黔驴技穷了,到这里求解决办法!
解决方案 »
- Delphi 一个获取网络服务器时间错误的问题,望高人帮帮
- 访问用什么做为fastreport的MasterData1的表头
- ListView的每一列都可修改,现在把readonly=true,但是只有第一列可以修改
- 请问怎样在打印报表时统计一列数据的总和并显示出来?
- 一个简单问题,怎样将一个变量的结果从程序传送到FastReport25中,谢谢?
- 怎样让DBGrid中只显示制定数目的记录数?
- 100分相送!!!小妹有一事相求!!!OLE调用EXCEL:如何屏蔽菜单(其中工具一项不屏蔽)与工具栏,如何实现OLE调用EXCEL的打印预鉴功能
- 如何获取RichEdit中光标的行号,找遍整个帮助文档都不可得
- 有关listbox的问题,急!!!!
- 请问让Delphi的VCL支持 UniCode 字符? (如TMemo)
- access中,为什么 select top 10 * from table比select * from table还慢?
- 请问dephi7中有Bebel这个一个组件么??我怎么找不到啊!!!
begin
FrmMain.Visible := not FrmMain.Visible;
N1.Checked := not N1.Checked;
end;
这是DLL中测试用菜单的OnClick事件。。在Dll中TFrmMain下这个过程的声明后加上了stdcall;
结果发现可以用它显示出dll窗体了,但是第二句报错;
然后以试一试的心态,注释掉了stdcall,结果居然能用了也不知道IDE抽了还是我虎躯一震RP爆发了。。晕死
既然问题已经不存在,放分吧~