Solved

File access in DLL for windows hook

Posted on 2002-07-25
7
259 Views
Last Modified: 2010-04-04
With some help from old answers I have managed to get a couple of windows hooks working (thanks to past contributors!) ... but now when I try to access files ... problems!

I tried something REALLY SIMPLE using TFileStream, like so...

  outFile := 'c:\test.out';
  with TFileStream.Create(transFile, fmCreate or fmShareCompat) do try
    Write('TEST', 4);
  finally
    Free;
  end;

... but it crashes the application from which the hook event eminated ... No data written.

So I'm assuming there are some things I have to do to be a little more careful when attempting this stuff.

Now here comes the ugly part... Those with a faint heart, go no further ...

I am using Delphi 3 (because of certain BDE compatibility issues within the hooking app)

Wait, it gets worse!

The app being hooked is a 16-bit app.

I'm not sure if these a contributing factors, but heck if I knew why it was happening I'd just fix it and stop bothering you.
0
Comment
Question by:Hamlet081299
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
  • 2
7 Comments
 
LVL 17

Accepted Solution

by:
geobul earned 300 total points
ID: 7176869
Hi,

Shouldn't it be 'outFile'?

with TFileStream.Create(outFile, fmCreate or fmShareCompat) do try

What kind of hook are you using?

Regards, Geo
0
 
LVL 20

Expert Comment

by:Madshi
ID: 7176913
You can't write a string like that. This should work:

Write(pchar('TEST')^, 4);

Regards, Madshi.
0
 
LVL 5

Author Comment

by:Hamlet081299
ID: 7177314
oh shoot ... could be just a nasty cut and paste error ...

Originally I was reading some data from transfile and writing it to outfile.  When I had problems I simplified, but completely missed that booboo.

I'll check it out tomorrow --- Geo might have just earned himself the easiest 300pts ever!

And Madshi ... yes you can write a string like that.  Delphi easily handles literal constants as PChars.  I'm not sure why you would think that wouldn't work.  

Ironically when I got the email notification, I thought "Aha, Madshi is onto it, all my problems will be solved..."  ;-)
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 20

Expert Comment

by:Madshi
ID: 7177347
Ha, you got me!!   :-)   That really works. I thought it doesn't work because "Write(strVar, Length(strVar))" doesn't work, either. But it seems that once more I underestimated Delphi's intelligence...

Regards, Madshi.
0
 
LVL 17

Expert Comment

by:geobul
ID: 7177426
If it's the problem then you are right - easy. You just pasted the proper piece of code here, short but sufficient. Sometimes such errors are so difficult to find.

About 'Write': I didn't see that! If I had seen it I would have said the same as Madshi did. New things to learn every day.

Regards, Geo
0
 
LVL 5

Author Comment

by:Hamlet081299
ID: 7178681
Yeah, it's handy with constants that generally Delphi makes a smart decision about how to treat it.

I just tried it out and found it was just a stupid cut and paste!!!

Thanks Geo
0
 
LVL 17

Expert Comment

by:geobul
ID: 7179473
Thanks a lot. The pleasure was mine.
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
Monitoring a network: how to monitor network services and why? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the philosophy behind service monitoring and why a handshake validation is critical in network monitoring. Software utilized …
Monitoring a network: why having a policy is the best policy? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the enormous benefits of having a policy-based approach when monitoring medium and large networks. Software utilized in this v…

696 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question