谁能解释一下这两段Dephi代码(作用:打开IE添加收藏和管理收藏夹对话框)的原理,并将其翻译为C++ Builder语言,多谢了!!! (100分)

  • 主题发起人 主题发起人 abedon
  • 开始时间 开始时间
A

abedon

Unregistered / Unconfirmed
GUEST, unregistred user!
谁能解释一下这两段Dephi代码(作用:打开IE添加收藏和管理收藏夹对话框)的原理,并将其翻译为C++ Builder语言,多谢了!!!

const
CLSID_ShellUIHelper: TGUID = '{64AB4BB7-111E-11D1-8F79-00C04FC2FBE1}';

procedure TForm1.OrganizeFavorites1Click(Sender: TObject);
var
H: HWnd;
p: procedure(Handle: THandle; Path: PChar); stdcall;
begin
H := LoadLibrary(PChar('shdocvw.dll'));
if H <> 0 then
begin
p := GetProcAddress(H, PChar('DoOrganizeFavDlg'));
if Assigned(p) then p(Application.Handle, PChar(Favorites1.Hint));
end;
FreeLibrary(h);
end;



procedure TForm1.AddtoFavorites1Click(Sender: TObject);
var
ShellUIHelper: ISHellUIHelper;
url, title: Olevariant;
begin
Title := EmbeddedWB1.LocationName;
Url := EmbeddedWB1.LocationUrl;
if Url <> '' then
begin
ShellUIHelper := CreateComObject(CLSID_SHELLUIHELPER) as IShellUIHelper;
ShellUIHelper.AddFavorite(url, title);
end;
end;
 
BCB和DELPHI所采用的COM接口技术是不是的,想直接翻译困难点。我点曾试过将一个DELPHI写的
实现建立快捷方式的代码翻译到BCB中,但是只翻译到类似ShellUIHelper := CreateComObject
(CLSID_SHELLUIHELPER) as IShellUIHelper; 这行时就已经因为出错而无法翻译了。
 
谢谢liguang
还有高手继续吗?
 
给你指条明路:上MSDN的网站,找到实现上面那些功能的VC代码,然后再将VC代码转
换为BCB代码。我的建立快捷方式的程序就是这样的做的。
 
把上述的代码做在一个Delphi的单元里,把它直接加到Builder的工程里使用,
就可以不用翻译了。
方法:1。import Unit(*.pas),生成一个与*.pas同名的*.hpp;
2。在你要引用该单时,include 这个*.hpp就可以了
 
谢谢你们,我试试看
 
把另外一个删了吧。快!
 
好消息:第二段代码解决了,成功地在自己的程序中调出了IE添加收藏对话框
坏消息:第一段的IE收藏夹管理对话框还是不知怎么调出来,也不知在MSDN中
怎么查
不要老是"学到了"&"listen"...,请你们认真探讨问题,发表高见,你们这样我是不会给分的
高手们,继续努力呀!


 
也不知成不成
typedef long __stdcall (*TDoOrganizeFavDlg)(void *vHINSTANCE,char *dwRoad);
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
TDoOrganizeFavDlg RSP = NULL;
HINSTANCE dllInst = NULL;
dllInst = LoadLibrary("shdocvw.dll");
if (dllInst)
{
RSP = (TDoOrganizeFavDlg)GetProcAddress(dllInst,"DoOrganizeFavDlg");
if (RSP == NULL)
Caption = "Failed to Get the Process Address!!!";
else
if (!RSP(Handle,""))
//if (!RSP(Handle,Favorites1.Hint))
//Favorites1.Hint应该是收藏夹的目录路径
//我在调试时用"",打开的是当前目录;用"d://",打开的是D盘根目录
Caption = "Failed to Open the Favorites!!!";
else
Caption = "Open the Favorites Sucessed!!!";
}
else
Caption = "Failed to Get the SHDOCVW Process Address!!!";
FreeLibrary(dllInst);
}

To abedon:
我调试第二段代码时,BCB不认识 ISHellUIHelper 这个东东类,它在哪里预定义好的?
可以的话,能否给我发一下完整的BCB原代码? zrabbit@163.net
先行谢过.
 
ishelluihelper是ms html 类型库里的声明,用引入类型库的方法可以引入
在delphi自带的mshtml.pas里
 
多人接受答案了。
 
后退
顶部