|
I worked with MS Excel automation.that is not too different...hihih KINDA SLOW STUFF
~CodeTheDreams~
|
|
|
|
|
here's my horrible situation:
there is a library that i want to use that operates on either a file or an IStorage object - if you give it a file, it will open its own storage via StgOpenStorage and proceed from there. so, really it likes IStorage, period.
however, my application already has a very nice I/O system in place where data can come from a file, a chunk of memory or from a set of user-defined callback functions. what i want to do is use my own I/O system.
what i need to know is, is there a reasonable way to create an object that implements IStorage so that I can use my own I/O system as the 'back end' ?
is there any good documentation on IStorage? i've looked at the MSDN and it doesn't really help me much - it assumes you're going to use StgOpenStorage and pals.
(yes. this is a repost, with better details)
-c
Zzzzz...
|
|
|
|
|
I only have about 1 week's experience with IStorage (I wrote a docfile viewer for work, we needed something better than the viewer that comes with VC), but as I understand it you can either use the OLE structured storage implementation (the one you get with the Stg* functions), or write your own.
For your situation, you'd write an implementation of IStorage /IStream , which would basically be pass-through calls to your own I/O system. Then create one of those COM objects and pass its IStorage interface to the library. The library has no idea what implementation is behind the IStorage it receives, it just knows that it can call methods in the interface. That is, after all, the whole point of COM.
--Mike--
I'm bored... Episode I bored.
1ClickPicGrabber - Grab & organize pictures from your favorite web pages, with 1 click!
My really out-of-date homepage
Sonork-100.19012 Acid_Helm
|
|
|
|
|
Michael Dunn wrote:
write an implementation of IStorage/IStream
any hints on how to do that? i can see their interfaces in the MSDN, but i don't have a good feeling as to what is really involved with implementing them (ie. how do the calls interact with each other, or modify the object, etc.).
-c
Zzzzz...
|
|
|
|
|
Chris Losinger wrote:
i can see their interfaces in the MSDN, but i don't have a good feeling as to what is really involved with implementing them
That's not what Michael said IMHO. You have to create a wrapper, and in the end, down the hills, just plug to the IStream/IStorage interfaces.
PS : the OLE compound file format is not documented. You are not likely to be able to implement these interfaces yourself, unless you buy a portion of the Windows source code. (or hack the net[^] to find debuting implementations, which I wouldn't trust by the way).
|
|
|
|
|
but ILockBytes is pretty easy to do. and that's what i've done. (see my reply to the root msg here)
-c
Zzzzz...
|
|
|
|
|
The easiest would be to provide an ILockBytes implementation (without the locking, jsut raw read & write), and use StgCreateDocfileOnILockBytes
You could even use the CreateILockBytesOnHGlobal....
Changing requirements are the crux of software development - you start with a sex drugs and rock'n'roll design, and end up with an aids crack and techno implementation [sighist] [Agile Programming] [doxygen]
|
|
|
|
|
|
...so I assume your last question is null and void?
Changing requirements are the crux of software development - you start with a sex drugs and rock'n'roll design, and end up with an aids crack and techno implementation [sighist] [Agile Programming] [doxygen]
|
|
|
|
|
IQuestion->Release();
-c
Zzzzz...
|
|
|
|
|
My companbion CD is cracked in 4 pieces. Its of no use to me. Believe it or not, but the MSPress website has no information on "Inside COM". I did a search for the Book, its not listed, I did a search for the author, he's not listed, I did a search by topic, and under COM, the book is not listed. I did an ISBN search, and no results. WHAT THE FARK?
ANyways, if you would be kind enough, could someone please zip up the cd contents and email them to me? Thank you very much. I will now forever know not to pile my programming books on top of eachother without first removing the companion cd's.
my book order for "essential com" is in the process of going through management, i expect an answer sometime after my projects deadline.
Ryan Baillargeon
|
|
|
|
|
erm...the cd is 50 meg
and the zip file is 23 meg
Bryce
|
|
|
|
|
Hey!...
I have an ftp you could upload it to if your nice enough, I can give you a
loaner account, and when I get home set you up with a permanent one? you up
for it?
ICQ 98527804
MSN rmb_fct@hotmail.nospam.com
Ryan Baillargeon
|
|
|
|
|
|
Yep, I read that of course.. But the fact remains that MSPress hass no mention on its site whatsoever that they even control the publication of this book.
Ryan Baillargeon
|
|
|
|
|
Ryan,
Maybe MS Press is unware of the fact that this book is not on their website. Maybe it could simply be because the book is no longer in print, or is just not supported any longer. The list could go on and on. Whatever the case may be, if you own a copy of the book, you should be entitled to support including but not limited to a CD replacement. Anytime I have ever had a problem with an MS Press Book/CD, I have always contacted them by telephone and asked for a replacement Book/CD which has always been sent out (of course they might ask you to send them back the defective CD which is never a big deal).
As with most Microsoft/MS Press software, distributing the contents of the book's CD would put someone in violation of the license agreement (EULA). Be legit and contact MS Press at their toll-free number listed on their FAQ page.
Regards,
|
|
|
|
|
My Amazon.com Order....
-----------------------------------------------------
Essential COM - Don Box
ATL Internals
Developers Workshop on COM and ATL 3.0
Multithreading Applications in Win32
Inside COM (I own already)
-----------------------------------------------------
Any Suggestions / Comments? I will be developing under VS.NET in VC++.
Ryan Baillargeon
|
|
|
|
|
Scrap Essential Com unless you intend on learning a lot of internals you won't need to know. Get 'Creating lightwight Components with ATL' by Jonathan Bates.
Christian
No offense, but I don't really want to encourage the creation of another VB developer.
- Larry Antram 22 Oct 2002
C# will attract all comers, where VB is for IT Journalists and managers - Michael
P Butler 05-12-2002
Again, you can screw up a C/C++ program just as easily as a VB program. OK, maybe not
as easily, but it's certainly doable. - Jamie Nordmeyer - 15-Nov-2002
|
|
|
|
|
Advice taken, book bought, thanks (only £6.99 from Amazon!)
"The folly of man is that he dreams of what he can never achieve rather than dream of what he can."
|
|
|
|
|
Nice Choices...COM Primer Plus is a good one
~CodeTheDreams~
|
|
|
|
|
I am attempting to develop an ActiveX control subclassed from the MFC Listbox.
Following the MSDN tutorial, I set everything up through the Control Wizard, including setting LISTBOX as the subclassed windows control. The problem is, the tutorials (I have read several) all say "If you want your subclassed control to keep the same appearance as the corresponding Windows control, the OnDraw member function for the control should contain only a call to the DoSuperclassPaint member function, as in the following example:
void CSampleCtrl::OnDraw( CDC* pdc, const CRect& rcBounds,
const CRect& rcInvalid )
{
DoSuperclassPaint( pdc, rcBounds );
}
"
Which is what the Control Wizard automatically does and which is how I left it. I was thinking that if I just leave it like so, when I add it to a new project, it will draw me a standard-looking listbox. Instead, I get a plain white box. I also tried calling AddString in my project and was informed by the compiler that the method does not exist.
So far I see no evidence of my ActiveX control being subclassed form LISTBOX (I have the following as well provided by class wizard:
BOOL CSampleCtrl::PreCreateWindow( CREATESTRUCT& cs )
{
cs.lpszClass = _T("BUTTON");
return COleControl::PreCreateWindow(cs);
}
BOOL CSampleCtrl::IsSubclassedControl( )
{
return TRUE;
}
)
Why am I just getting a white box?? Are there some message handlers I need to address first?? As for the AddString not working, I'm still a little rusty on subclassing... do I have to add methods for all listbox methods I want to use in my control and just call CListbox::Addstring(blah, blah, blah) in order to use the Listbox Functionality???
I have read a lot of articles and tutorials on subclassing and activex controls and mfc controls and there seems to be something that I don't know that is overlooked or assumed to be obvious. Any ideas??
Tym!
|
|
|
|
|
I have a COM+ component which bulk inserts records into a table, which takes 5secs to process one request. If I try executing this component multiple times while it is processing job. SQL server 2000 throws PRIMARY KEY VIOLATION error. How can I lock that table while the component is in process.
Thanks a million
|
|
|
|
|
Did you configure the component to require new transaction?
|
|
|
|
|
hello
i am at work and am using an in house activex (ocx) control
the control is zero size and is hidden on my dialog
(it actually talks to the serial port and i didnt write it )
as usual everything is cool and funky when i run in debug mode
but when i run a release build it falls over when i do things like try and
minimize the app, try and use the menu,
As an exmaple, when i try and use the main dialog's menu (its a dialog based app) the call stack looks like...
CWnd::AttachControlSite(CWnd * const 0x004002f6 {CWnd hWnd=0x00000000}, CHandleMap * 0x008e2528) line 420 + 5 bytes
CWnd::FromHandle(HWND__ * 0x004f0344) line 293
CWnd::OnWndMsg(CWnd * const 0x004002f6 {CWnd hWnd=0x00000000}, unsigned int 289, unsigned int 2, long 4547344, long * 0x0012f1d0) line 1896 + 6 bytes
CWnd::WindowProc(CWnd * const 0x004002f6 {CWnd hWnd=0x00000000}, unsigned int 289, unsigned int 2, long 5178180) line 1585 + 27 bytes
AfxCallWndProc(CWnd * 0x00000000 {CWnd hWnd=???}, HWND__ * 0x004002f6, unsigned int 289, unsigned int 2, long 5178180) line 218
AfxWndProc(HWND__ * 0x004002f6, unsigned int 289, unsigned int 2, long 5178180) line 368
USER32! 77d67b17()
USER32! 77d6cdce()
USER32! 77d4459d()
USER32! 77d447b4()
NTDLL! 77f5108f()
USER32! 77d5779a()
USER32! 77d5b79f()
USER32! 77d6cdce()
USER32! 77d45cc9()
USER32! 77d45ce8()
CWnd::DefWindowProcA(CWnd * const 0x004002f6 {CWnd hWnd=0x00000000}, unsigned int 274, unsigned int 61589, long 21037417) line 1006 + 19 bytes
CWnd::Default(CWnd * const 0x004002f6 {CWnd hWnd=0x00000000}) line 248 + 19 bytes
MRKTLNK! CMrktLnkDlg::OnSysCommand(unsigned int,long) + 163 bytes
CWnd::OnWndMsg(CWnd * const 0x004002f6 {CWnd hWnd=0x00000000}, unsigned int 274, unsigned int 61589, long 4543264, long * 0x0012f64c) line 1931
CWnd::WindowProc(CWnd * const 0x004002f6 {CWnd hWnd=0x00000000}, unsigned int 274, unsigned int 61589, long 21037417) line 1585 + 27 bytes
AfxCallWndProc(CWnd * 0x00000000 {CWnd hWnd=???}, HWND__ * 0x004002f6, unsigned int 274, unsigned int 61589, long 21037417) line 218
AfxWndProc(HWND__ * 0x004002f6, unsigned int 274, unsigned int 61589, long 21037417) line 368
USER32! 77d67b17()
USER32! 77d6cdce()
USER32! 77d4459d()
USER32! 77d447b4()
NTDLL! 77f5108f()
USER32! 77d5779a()
USER32! 77d5b79f()
USER32! 77d6cdce()
USER32! 77d45cc9()
USER32! 77d45ce8()
CWnd::DefWindowProcA(CWnd * const 0x004002f6 {CWnd hWnd=0x00000000}, unsigned int 161, unsigned int 5, long 21037417) line 1006 + 19 bytes
CWnd::WindowProc(CWnd * const 0x004002f6 {CWnd hWnd=0x00000000}, unsigned int 161, unsigned int 5, long 21037417) line 1586 + 19 bytes
AfxCallWndProc(CWnd * 0x00000000 {CWnd hWnd=???}, HWND__ * 0x004002f6, unsigned int 161, unsigned int 5, long 21037417) line 218
AfxWndProc(HWND__ * 0x004002f6, unsigned int 161, unsigned int 5, long 21037417) line 368
USER32! 77d67b17()
USER32! 77d6cdce()
USER32! 77d44435()
USER32! 77d44d38()
does anyone have any suggestions as to how to can tell my app to ignore any exceptions from this naughty ocx?
regards
Bryce
|
|
|
|
|
Are you sure the control is developed properly and anyone else using it doesn't face these problems ,
build an application with nothing but the control on the dialog box if it still crashes its not your fault the control is faulty
or you can use try catch to catch any exceptions and try to ignore them (NOT A GREAT IDEA!!)
Symmetrical is Beautifull
IUnknown is Symmetrical
IUnknown is Beautifull
|
|
|
|
|