一个不知道什么问题的问题,路过的都进来看看

tokimemo 2011-12-06 02:57:53
起因:接到开发任务,弄一个很简单的BHO,主要是记录IE的访问情况。
思路:建立基本的BHO框架、当用户访问页面变化时,将访问记录写入到SQLite数据库中。
开发环境:Win7+Delphi2010
问题:当写入数据库时,我用了网上较为常见的SQLiteDatabase(TSQLiteDataBase)。
结果编译后,如果包含初始化该对象的那条语句,整个BHO就失灵了,如果去掉就正常(当然,那样就没办法写入数据库了)

代码片段:由于BHO代码比较常见,我就只写部分代码

unit LookInBHO;

{$WARN SYMBOL_PLATFORM OFF}
{$B-}
interface

uses
ComObj, ActiveX, LookInBHO_TLB, StdVcl, SHDOCVW, Registry, Windows, DateUtils,
StrUtils, SysUtils, Dialogs, wininet, Classes, SQLiteTable3;

type
TLooKInBHO = class(TComObject,IDispatch,IObjectWithSite, ILooKInBHO)
public
function GetTypeInfoCount(out Count:Integer):HResult; stdcall;
function GetTypeInfo(Index,LocaleID:Integer;out TypeInfo):HResult; stdcall;
function GetIDsOfNames(const IID:TGUID;Names:Pointer;NameCount,LocaleID:Integer;DispIDs:Pointer):HResult; stdcall;
function SetSite(const pUnkSite:IUnknown):HResult; stdcall;
function GetSite(const riid:TIID;out site:IUnknown):HResult; stdcall;
function Invoke(DispID:Integer;const IID:TGUID;LocaleID:Integer;Flags:Word;var Params;VarResult,ExcepInfo,ArgErr:Pointer):HResult; stdcall;
procedure DoDocumentComplete(const pDisp: IDispatch; var URL: OleVariant);
procedure DoOnQuit();
procedure WriteDB();
function getLastPos(const substr,s:string):integer;
procedure DoBeforeNavigate2(const pDisp:IDispatch;var URL:OleVariant;var Flags:OleVariant;var
TargetFrameName:OleVariant;var PostData:OleVariant;var Headers:OleVariant;var Cancel:WordBool);

private
IEThis:IWebBrowser2;
Cookie:Integer;
end;
type

TLookinBHOFactory = class(TComObjectFactory)
private
procedure AddKeys;
procedure RemoveKeys;
public
procedure UpdateRegistry(Register:Boolean); override;

end;

implementation

uses ComServ;

var
HasDb : boolean;
iRnd : int64;
sTime, eTime : TDatetime;
vistacount : integer;
sUrl,LastUrl : string;
/////////定义结束///////////////
//////////以下省去部分实现代码/////////
procedure TLooKInBHO.WriteDB;
var
dbPath,sql : string;
db : TSQLiteDatabase;
begin
dbPath := 'D:\Project\Delphi\';{这个是测试用地址}
if FileExists(dbPath + 'IEHistory.dat') then
begin
db := TSQLiteDatabase.Create(dbPath + 'IEHistory.dat');{就是这句,加上就无法正常使用,整个DLL就失灵了}
try

sql := 'INSERT INTO ieUrl(id,rnd,url,v_time,c_time) VALUES (null,' + inttostr(iRnd) + ',"' + LeftStr(LastUrl,255) + '","' + FormatDateTime('yyyy-mm-dd hh:nn:ss',sTime) + '","' + FormatDateTime('yyyy-mm-dd hh:nn:ss',sTime) + '")';

if db.TableExists('ieUrl') then begin
db.ExecSQL(sql);
db.Commit;
end;
except
on E:Exception do
MessageBox(0,Pwidechar(E.Message),'错误提示', MB_OK);

end;
db.Destroy;
end;
end;
//////////以上省去部分实现代码/////////


说实话,我不太懂Delphi,也刚刚开始搞BHO,所以希望各位大神多多帮忙。
个人分析,DLL失灵,测试中SetSite函数都无效,很有可能是接口实现出现问题。而代码中仅仅是加了一个类TSQLiteDataBase,那会不会是这个地方造成了接口实现出现了问题。
因为TSQLiteDataBase中引用了SQLite3(就是调用SQLite3.dll文件),会不会因为BHO再次调用DLL,因为操作系统权限的原因,导致调用失败,所以该BHO在初始化的时候失败。
如果需要更多信息,请回帖说明,多谢大家。
...全文
158 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tokimemo 2011-12-14
  • 打赏
  • 举报
回复
调用其他DLL,也会有特殊的函数不能用,估计是IE的BHO权限很低造成的。
现在Windows的补丁越来越多,很多地方都会有权限问题,真是愁人啊,看来需要其他办法来解决了。
都先生 2011-12-08
  • 打赏
  • 举报
回复
一头的雾水。调试都不能进行吗?
haitao 2011-12-07
  • 打赏
  • 举报
回复
估计是bho的接口,对于调用外部dll有严格限制。。。。。。。。。。
试一试调用一个普通、简单的dll,会不会也如此
否则,就是sqlite3.dll的特殊问题了
tokimemo 2011-12-07
  • 打赏
  • 举报
回复
BHO完全就没执行,主流调试方法基本无效,调试代码什么的根本没用。

我只是想问问,接口中这样用类,会不会产生什么问题。
wzzwwz 2011-12-06
  • 打赏
  • 举报
回复
对这个不熟。但提供下找错思路。如果不能在IDE里调试,就在你怀疑的地方放调试代码,输出日志到文件。从大范围慢慢往小范围缩。
tokimemo 2011-12-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kaikai_kk 的回复:]

这些代码实在看出不问题,自己按F7单步调试吧,看看到那里结果就不对了
[/Quote]
BHO如何调试,求解。查了半年百度和谷歌都没有人知道。

因为代码根本没有运行(感觉是接口就没有实现),所以调试什么的完全没有用。
kaikai_kk 2011-12-06
  • 打赏
  • 举报
回复
这些代码实在看出不问题,自己按F7单步调试吧,看看到那里结果就不对了
今天给大家带来从新手到破解出无线密码的全教程,你只要跟着我一步一步来就行了 事先我们要准备几个软件。软件有 VM虚拟机, XP的可以用精简版,WIN764位的需要完整破解版的(当然XP也可以用,只是有点大而已。下载地址是:http://www.iqshw.com/soft/20120520/53575.html 还要一个加载到虚拟机里的镜像文件,我用的是 CDLINUX_支持8187和3070-30419版.iso 以上二个软件也可以苹果的百度网盘下,地址是: http://pan.baidu.com/share/link?shareid=9005&uk=3758888677 硬件方面,最好有一张USB接口的网卡,当然还是8187或3070的蕊片 如果没有USB接口的,可以试一下用U盘启动镜像,或刻个光盘试试 下面我们开始讲课, 第一课,安装VM虚拟机 大家看我操作吧,会安装的大侠请路过下,看下一课 下好VM虚拟机后,我们开始安装了。看我操机吧 安装之前我们还是先关了QQ管家之类的安全软件吧 之前我们有网卡的需要事先驱动好。 呃。我天线没整好,信号好像不给力,不管它,我大概怎么破,步子是怎么样的,你学到就行。另中间有什么不懂的,可以向我在的群问哈。 虚拟机安装好了,具体怎么设置看我操作 之后就一路下一步呗,电脑有点差,呵 好滴,我们进系统了,进来后,我们还要加载一下我们的网卡,VM虚拟机的菜单里,这样就加载进去了。第一课OK。下面第二课 第二课。开始破解,和扫描 我一般用的都是MINIDWEP这个,我们称它为水滴,看图样就清楚了,水滴,奶瓶,打汽筒。。。我们打开软件OK。再点右边的扫描。这节我们先学怎么破解WEP信号的AP。。呃,,没有WEP的。好吧,我大概说下怎么破。这信号扫出来后,看一下有没有客户端在线。群里有很多朋友问我客户端在不在线怎么看,我教大家怎么看哈。这个后面带MAC地址的就是在线的啦。就这么简单。WEP如果能扫出来,还有在线的,我们可以点一个信号,再点启动。之后什么都不用动。静等密码出来就行。IVS一般2W左右就OK哇。 好吧。这节WEP的课结束,下面讲重点课,WPA和PIN码破解方式 第三课, 信号扫出来后,如果没有WEP或WEP都破完的,我们开始破难度更高的吧。:)加密方式选好。破解WPA、WPA2的现在好像就二种吧,一种是抓包再跑包,就是猜密码,只是用软件而已。另一种呢。就是PIN码破解啦。这个可牛的很,信号我扫好了,我先讲抓包吧。抓包也要客户端在线才能抓。要抓包的,点启动如果这个DATA数字动的很慢的话,等下次好了。。呃。网上说是有让这个数动的快的方法,具体的我没研究。。。然后静等抓包成功吧,等的时候,我说下抓到包之后要干嘛,有二种方法,一种是放在这个镜像里让软件自带的密码包跑密码,不过这个密码包是国外的,不强大,我们需要第二种方法,把握手包复制出系统,我们用另外强大的字典来跑,用到的软件是WESA,这个软件百度网盘也好,群共享里也有(这个如果要跑包,机器配置一定要好哦) 嗯嗯呖,,怎么还没抓到握手包。。。 那先这样吧,那放着抓,我这先讲怎么PIN吧 我先说下PIN是怎么回事。 每个路由器都有它自己的PIN码。PIN码是干什么的呢?看说明呗。这里我讲一下,为什么要破解PIN码,PIN码破解出来后,我们就可以很方便的啦,一种是直接用PIN码连接路由,这个软件群共享里也有。另一种,用这个镜像破解出PIN码的时候,其实无线密码就出来了。等会大家仔细看看。另一种用法,等下面机主密码改了的时候,其实我们可以拿这个PIN来秒破无线密码的。所以PIN码是很强大哈。。。。如果开启了WPS的话,另教大家看一个路由有没有开启WPS功能。这个后面带WPS的就是说明开启的。不过也不是很准,有时候扫描出来后面没有的,有时也有。这样我们就点开始PIN。看它数字动不动就知道了,不动的话99%说明是没开启WPS的。 抓包抓的蛋疼,大家可以事先找一下开启了WPS的来破,如果真没有,只能通过抓握手包的话,那就等吧。破解握手包还要看运气。还要看你来猜的密码包中有没有这个密码…… 这里我就先暂停了,等抓到了我再开始 我表视对这个录像软件很强大的BS。。我等了很久了,握手包也没抓到,算了,直接下一课吧。 第四课,跑包 我们等握手包抓到好,导出镜像也可以,在里面跑也可以,可惜我的没抓到,我只能演示给大家看是怎么跑啦。先导出握手包,具体的可以通过U盘来复制。功能完整的可以直接到握手

5,928

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧