|
The code that I use to write ( from one process outside the DLL), and to read ( from my dll that is hosted on Ms Word), is:
write:
IStreamPtr spStream;
CreateStreamOnHGlobal(hGlob, TRUE, &spStream);
if(spStream) {
if((SUCCEEDED(p->Save(spStream, FALSE))) && (pBsMetaCtrl != NULL)) {
IUnknownPtr pUnk = spStream;
VARIANT VUnk;
VUnk.vt = VT_UNKNOWN;
VUnk.punkVal = pUnk;
pBsMetaCtrl->SetMetafile(VUnk);
read:
(...)
BOOL SetMeta(IStream *pStream, IPicture **Pict)
{
BOOL bResult = FALSE;
CComPtr<IPictureDisp> pic;
LARGE_INTEGER l;
l.QuadPart =0;
pStream->Seek(l, STREAM_SEEK_SET, NULL);
OleLoadPicture(pStream, l.LowPart, FALSE, IID_IPictureDisp, (void **) &pic);
if(pic) {
pic->QueryInterface(IID_IPicture, (void **) Pict);
if(Pict) {
bResult = TRUE;
}
}
return bResult;
}
I don´t know what I'm doing wrong, seems that I'm not getting something ok from the global memory, can you help a little bit more ? Thanks a lot,
Braulio
|
|
|
|
|
Braulio, well for merging the proxy/stub, the easy way , is
This is for VC6++
- Create a ATl Dll Server , check <<allow merging="" of="" proxy="" stub="" code="">>
This will create a file named dlldatax.c that includes code generated by MIDL compiler , two file sin particular are generated: dlldata.c, which declares the DLL entry points for the stub and the file suffixed with _p.c which implements the proxy and stub object.
- Go to Project Settings select the dlldatax.c file and from the General tab and uncheck Exclude file from build.
-From the C/C++ tab for this file select the Precompiled Headers category and make sure that this file does not use precompiled headers.
-Define the symbol _MERGE_PROXYSTUB for the entire project.
If you have a custom or dual interface then this will bloat your server with the type library marshaler that isn't necessary, you already merged the proxy/stub so here are the steps to take off the type library marshaler, letting alone the universal automation marshaler:
Use the Resource Includes item of the View menu and remove the type library resource from the Compile-time directives box.
Change the calls to _Module.RegisterServer() and _Module.UnregisterServer() to have a parameter of FALSE. You will find these calls in DllRegisterServer() and DllUnregisterServer() in the main cpp file of your project (the one that has the same name as your project).
Edit the RGS file for every object implemented in the server and remove the reference to the type library. For each object it adds, Object Wizard will add an RGS with the short name you specified for the object, within this there will be a script to register the object, and there will be a line that starts with 'TypeLib'; remove this line.
This is all
Perhaps after this, thsi will not crash ?
As solon asked, the error is a exception error or a error message ?
Joao Vaz
|
|
|
|
|
Hi Joao !
Thanks for the tip, I will try that.
About error or exception, is a little bit strange sometimes gives an error, sometimes an exception...
One of the problems, is that I´m givin the IStream as a LPUNKNOWN pointer ( I don´t know if I should wrap it in a IDispatch pointer..., or maybe I have to use the proxy stub thing).
Thanks a lo Joao... ( je je If I fix this I will write one article in codeproject... XD ).
Greetings
Braulio
|
|
|
|
|
Any tut's or examples on the basics on Drag and Drop???
I've tried but had no success dragging files off the desktop into a CListView so i'd like to read a basics tutorial if possible...
Know of any...?
Thanx in advance!
"An expert is someone who has made all the mistakes in his or her field" - Niels Bohr
|
|
|
|
|
For dragging files, you don't need COleDropTarget. Use CWnd::DragAcceptFiles and WM_DROPFILES.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
Thanx, I'll try that and hope for the best.
"An expert is someone who has made all the mistakes in his or her field" - Niels Bohr
|
|
|
|
|
Ahhh! sweet exactly what I wanted
Thanx Tomasz.
"An expert is someone who has made all the mistakes in his or her field" - Niels Bohr
|
|
|
|
|
|
I just read your first tutorial on Shell extensions...awesome I really appreciate you writting those.
I'll definetly have a read of the others too.
Thanx!
"An expert is someone who has made all the mistakes in his or her field" - Niels Bohr
|
|
|
|
|
how do you put a code like mailto: so that when a user clicked the email address it will open up the outlook express so that the user can email someone... i am trying to put my email address in my about dialog box for my program but i cant seem to figure out how to put mailto. is there any way to do that???
Thank you very much,
John
|
|
|
|
|
Use ShellExecute - Nish has an article on it around here somewhere.
Christian
The tragedy of cyberspace - that so much can travel so far, and yet mean so little.
"I'm thinking of getting married for companionship and so I have someone to cook and clean." - Martin Marvinski, 6/3/2002
|
|
|
|
|
thanks...
Thank you very much,
John
|
|
|
|
|
For ready-to-use class, check Dec'97 issue of MSJ, C++ QA column by Paul DiLascia. The article may be included in MSDN on your harddisk. If it's not there, go to msdn.microsoft.com for online version.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
Hi,
I have an already created project and I want to merge the proxy/stub code into my DLL, ... how can I do that now ? ( When I created the project I didn´t think that I needed that, ... aaahh stupid check box... stupid me...).
Do I have to compile at least one time with NMake in order to make this proxy stub thing work ?
Thanks in advance, Bye !
Braulio
|
|
|
|
|
I'm developing a Visual .Net application that uses the CMultiPageDHtmlDialog class. This clas uses html pages to display information to the user. The problem is the fact that i have ActiveX int Html pages and when a new page is load, a MessageBox appears informing the user that an ActiveX can be unsafe ... . How can I avoid this messages? I try to change the configurarion of mi Internet Explorer but it dont works.
Thank You.
Jose Vicente
|
|
|
|
|
It has something to do (I think) with the IObjectSafety.
I think by default it's not implemented which makes your activex control unsafe for scripting. I assume to prevent JScript's from accessing your hard drive...
Just add IObjectSafetyImpl to your list of inherited classes and add an entry to your COM map.
Look under your help files ATL example....i think this shows you how it's done.
Cheers!
"An expert is someone who has made all the mistakes in his or her field" - Niels Bohr
|
|
|
|
|
I dunno if i'm way off or not so correct me if i'm wrong...
Is it possible to take action on a file drag onto a folder on the desktop...?
For example my program searches for magic bytes inside a file to determine if it's a valid file for that folder...?
Basically is it possible (using Shell extensions) to handle Drag/Drop operations of a desktop folder you create through windows and take action on the file.
Thanx again!
"An expert is someone who has made all the mistakes in his or her field" - Niels Bohr
|
|
|
|
|
Just found the Shell Extensions tuts by Mike Dunn...Sweet...their a pretty cool concept....
I like..I like...
"An expert is someone who has made all the mistakes in his or her field" - Niels Bohr
|
|
|
|
|
I'm using Win98 on a 1GHZ PC. I have MS Visual C++ 6.0 + sp5, DirectX8.1 SDK and MSDN Januray 2001 installed.
I recently discovered that I could add DirectX SDK help directly into MSDN help by editing the XML files MSDN100.COL and HHCOLREG.DAT. Following a few simple instructions from a website I added the DirectX SDK manual (directx8_c.chi, directx8_c.chm) into the Content display of MSDN. On testing it out all worked perfectly. I then clicked the SEARCH tab and performed a search for the keyword "D3D" and it promptly returned back all DirectX results. Perfect. Now i clicked the INDEX tab. Immediately a dialog popped up stating "Preparing index for first time use". No problem I first thought -- MSDN needs to "add" the new DirectX index keywords. Unfortunately this is where the problem occurs.
The "Preparing Index For First Time Use" dialog never ended. After 1 hr of constant HDD access and normal window operations coming to a hault I had to simply warm boot my PC. Unfortunately I couldnt reenter windows and so had to restore an older drive image to C:. Ouch. Can someone tell me what the heck is going on here? Why the is Windows crashing? Why does indexing take so long on a 1GHZ PC?
Perhaps the method Im using to add the DirectX SDK help into MSDN isnt correct? Again, I'm able to see the DirectX help perfectly under Contents and Search, but under Index there seems to be a problem when MSDN automatically goes into the mode of Preparing Index. Perhaps I'm just not waiting long enough? I should mention that one time I waited for 1.5hrs and found the program "msdev" crashed which took down the MSDN help file.
Within the HHCOLREG.DAT file I added the following lines:
------
<doccompilation>
<doccompid value="directxsdk81g">
<doccomplanguage value="1033/">
<locationhistory>
<colnum value="1/">
<titlelocation value="D:\Program Files\Microsoft Visual Studio\MSDN\2001JAN\1033\directx8_c.chm">
<indexlocation value="D:\Program Files\Microsoft Visual Studio\MSDN\2001JAN\1033\directx8_c.chi">
<querylocation value="D:\Program Files\Microsoft Visual Studio\MSDN\2001JAN\1033\MSDN100.CHQ">
<locationref value="2001JAN-1033-Local">
<version value="29344199/">
<lastpromptedversion value="0/">
<titlesamplelocation value="">
<titlequerylocation value="2001JAN-1033-Local">
<supportsmerge value="0/">
------
Thanks for any info.
|
|
|
|
|
SDI App wiz w/ doc/view.
The view is CListView and i'm want to change the style to LVS_REPORT within the CListView's OnCreate.
I have tried
GetListCtrl().SetWindowLong();
but SetWindowLong doesn't exist for CListCtrl....what am I doing wrong...?
How do I change the CListView to report mode...?
Thanx in advance!
"An expert is someone who has made all the mistakes in his or her field" - Niels Bohr
|
|
|
|
|
Ummmmmm, I am not really sure here, but try using ModifyStyleEx/ModifyStyle
Nish
My miniputt high is now 29
I do not think I can improve on that
My temperament won't hold
www.busterboy.org
|
|
|
|
|
Shite Nish...thanx again...I didn't even think of that...
Cheers!
"An expert is someone who has made all the mistakes in his or her field" - Niels Bohr
|
|
|
|
|
Sweet!!
It worked.
Thanx brutha!
"An expert is someone who has made all the mistakes in his or her field" - Niels Bohr
|
|
|
|
|
HockeyDude wrote:
but SetWindowLong doesn't exist for CListCtrl....what am I doing wrong...?
That's simple SetWindowLong doesn't exist in MFC. You can use ModifyStyle as Nish pointed out, or call 'raw' SetWindowLong:
::SetWindowLong(GetListCtrl(), GWL_STYLE, whatever);
BTW: you don't need GetListCtrl() call to change style - your view *is* a list control - at the API level, of course.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
Of course.
I knew that...
Thanx though!
"An expert is someone who has made all the mistakes in his or her field" - Niels Bohr
|
|
|
|