|
hello,
thanks for the info with the finalconstruct.
and for the _bstr_t problem i found some more info. in fact it is working in a simple atl coclass, but i have the problem in a rather complex application. but it seems like i found an error, but i do not know, why it is like this.
i have a function
HRESULT GetSection([in] BSTR bstrSection, [out,retval] IVConfigFileSection** pVal );
it should return the section of a config file based on the section name. an empty section name should return the default section selected before.
i call this function from inside the same class like following:
CComPtr< IVConfigFileSection > pSection = NULL;
GetSection( L"", &pSection );
or
GetSection( L"MySection", &pSection );
then i get the error with the string assignment in a complete different function.
if i change the call of the function to:
GetSection( (_bstr_t)"", &pSection );
or
GetSection( (_bstr_t)"MySection", &pSection );
it works, the string assignment is correct.
so i thought maybe it has something to do with the GetSection function.
this one is very simple:
STDMETHODIMP VConfigFile::GetSection(/*[in]*/ BSTR bstrSection, /*[out,retval]*/ IVConfigFileSection** pVal )
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
*pVal = NULL;
if ( SysStringLen( bstrSection ) == 0 )
return default;
else
return other;
return S_OK;
}
now i'm not sure if it has something to do with the SysStringLen function?
or is it wrong to pass a L"Text" parameter to a function expecting a BSTR paramter?
thanks in advance
enrico
|
|
|
|
|
just now have a short time, so cannot study your sample deeper. But the fact is, that generally it is wrong to pass L"Text" parameter when function expects BSTR .
In fact it depends how the function handles the parameter and in some cases it can work, but it is not good technique.
Consider the fact, that L"Text" provides only WCHAR - this means zero terminated string. But BSTR have before the string 4 bytes containing the length of the string. Then if the function relies on these 4 bytes and you do not provide them - it will just use some garbagge 4 bytes before the string and use it as a length - what will be the result noone can say.
Hope this helps.
|
|
|
|
|
I like implement COM classes in my WTL GUI app. These COM components can be called by scripting clients to change the user interface. If I try to add a new ATL object to my WTL project, I get an error message that this is not an ATL project. When I add some ATL headers and a BEGIN_OBJECT_MAP() END_OBJECT_MAP() pair to my main file, the wizard works fine. After selecting a simple object and pressing Finish, I got another message:
Sorry! An error occurred while generating the object.
What is going wrong
Thanks
|
|
|
|
|
I made a nice toolbar like this:
<br />
CToolBarCtrl ctrl;<br />
ctrl.Create(m_hWnd, NULL, NULL, ATL_SIMPLE_CMDBAR_PANE_STYLE | TBSTYLE_FLAT | TBSTYLE_TOOLTIPS, 0, ATL_IDW_TOOLBAR);<br />
ctrl.SetImageList(largeImages);<br />
<br />
TBBUTTON ToolbarButtons[12];<br />
memset(ToolbarButtons, 0, sizeof(ToolbarButtons));<br />
int n = 0;<br />
ToolbarButtons[n].iBitmap = 0;<br />
ToolbarButtons[n].idCommand = ID_FILE_SIGNIN;<br />
ToolbarButtons[n].fsState = TBSTATE_ENABLED;<br />
ToolbarButtons[n].fsStyle = TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE;<br />
...etc<br />
<br />
ctrl.SetButtonStructSize();<br />
ctrl.AddButtons(n+1, ToolbarButtons);<br />
ctrl.AutoSize();<br />
return ctrl.m_hWnd;<br />
The returned hWnd is added to the CMainFrame as a toolbar. Works perfectly. But how do i enable/disable buttons in my toolbar?
Thank you!
|
|
|
|
|
|
Add them to the UPDATE_UI_MAP. For example,
UPDATE_ELEMENT(ID_FILE_PRINT, UPDUI_TOOLBAR)
and then in the OnIdle() handler, have something like this:
UIEnable(ID_FILE_PRINT, /* your boolean condition here */);
|
|
|
|
|
I want to create a Netscape Plug-in for custom MIME type. Can I get anything in ATL for that?
Thanks in advance
Mahesh
|
|
|
|
|
For some reason I can't find/use the ATL Object Wizard. The button to use it is disabled and its not under my Insert menu. I have the folder and all the files for the Object Wizard (C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Template\ATL) but I cannot use it. Should I reinstall or is there a way to turn it on?
Thanks for any help.
|
|
|
|
|
|
Hello,
I'm trying to use DDX_CONTROL to get to the control on my dialog in an easy way. I've declared a combo box as a private member of my dialog like this:
CComboBox m_TypeCombo;
I have a DDX map like this:
BEGIN_DDX_MAP(SearchParametersDialog)
DDX_CONTROL(IDC_SEARCH_FOR_COMBO, m_TypeCombo)
END_DDX_MAP()
Now, when I compile this, I get the following error:
c:\wtl70\include\atlddx.h(489) : error C2039: 'SubclassWindow' : is not a member of 'CComboBoxT<class atl::cwindow="">'
d:\mb-tools\explorer_plugin\src\win32\searchparametersdialog.h(32) : see reference to function template instantiation 'void __thiscall WTL::CWinDataExchange<class searchparametersdialog="">::DDX_Control(unsigned int,class WTL::CComboBoxT<class
atl::cwindow=""> &,int)' being compiled
But I don't get why it does that - CComboBox does have a method SubclassWindow! What am I doing wrong? Thanks!
|
|
|
|
|
Sorry for replying to myself, but I found an answer in http://groups.yahoo.com/group/wtl/message/4566 - however, I have no idea why this works in the first place, and secondly, why doesn't this work like it is in WTL? A bug in WTL? It looks like something that is quite common...
cheers,
roel
|
|
|
|
|
You need a CWindowImpl -derived class for DDX_CONTROL to work. CComboBox is a CWindow class (just implements a wrapper around an HWND and CB_* messages). Add this class definition to your app:
class CComboBoxImpl : public CWindowImpl<CComboBoxImpl, CComboBox>
{
DECLARE_EMPTY_MSG_MAP();
};
--Mike--
THERE IS NO THERE IS NO BUT THERE IS
MAGIC PIXIE DUST BUSINESS GENIE CODE PROJECT
Homepage | RightClick-Encrypt | 1ClickPicGrabber
"Which comes first, the bug or the stress?" -- Chris Maunder
|
|
|
|
|
Thanks Michael. Do you have any idea why this is not implemented by default in WTL? I would think this is something that is used a lot - is there a reason?
|
|
|
|
|
Since I'm not the author of WTL I can't say for sure. It's more a documentation problem (there isn't any) so the solution isn't obvious at all (I myself happened to see the answer in a discussion board somewhere on CP)
--Mike--
THERE IS NO THERE IS NO BUT THERE IS
MAGIC PIXIE DUST BUSINESS GENIE CODE PROJECT
Homepage | RightClick-Encrypt | 1ClickPicGrabber
"Which comes first, the bug or the stress?" -- Chris Maunder
|
|
|
|
|
Here´s an easyer solution:
declare you global CComboBox global variable like you did, But dont put a DDX entry for it on the map, instead on your dialogs WM_INITDIALOG handler,
add this:
m_TypeCombo.Attach(GetDlgItem(IDC_MYCOMBO));
ATLASSERT(m_MyCombo.m_hWnd != NULL);
where (of course) IDC_MYCOMBO is the ID of your combo.
Note that you can do this for any control.
Hope this helps.
|
|
|
|
|
Of course, you then defeat the purpose of DDX in the first place. With DDX_CONTROL you don't have to write all those GetDlgItem/Attach calls.
--Mike--
THERE IS NO THERE IS NO BUT THERE IS
MAGIC PIXIE DUST BUSINESS GENIE CODE PROJECT
Homepage | RightClick-Encrypt | 1ClickPicGrabber
"Which comes first, the bug or the stress?" -- Chris Maunder
|
|
|
|
|
I agree, it does sort of defeat DDX, but then again, thats the beauty of WTL, you dont HAVE to used DDX! and "all those GetDlgItem/Attach calls" is actually only one at InitDialog. NE way, i do respect your opinion, but i must say that in this case i disagree with it, i find that just adding a line of code on initdialog is easyer that writting your own dervived class, writting a DDX entry for it, etc.
|
|
|
|
|
Hello,
I am new to ATL/WTL and I don't really understand why I would need these libraries. Actually I only developed my applications with MFC and some ActiveX components. I read some articles about ATL and WTL on CodeProject. In the one hand I read 5 articles about ATL and understood nothing, the writer mostly talk about pointers and vtables... What's his point ? What about saying "ATL is...". Then I read the introduction to WTL and understood that It was somekind of MFC-COM wrapper. Why would I need a MFC-COM wrapper to developer a software ? Moreover It seems that it's not an official library and I can't find any information on MSDN:
"Your search using "All words" for ""wtl""
returned 0 results."
If you have any good articles or books to advice me, that would great. I feel like I am losing something. Is "Developer's Workshop to COM and ATL 3.0" a good reference ? I don't really understand why I would need something else that MFC to develop a Windows Application.
All your help is welcome,
JM
Web: http://goa.ifrance.com
|
|
|
|
|
WTL is not an MFC wrapper, it is a replacement for MFC. It is for developers who want to be in control, at a low level, of what is happening in their applications and who do not want to ship the huge MFC dll. 1mb may not look like much, but on a handheld with 8megs of memory, it is Anyway, another reason to ditch MFC is it's uglyness, but that's a different can of worms...
|
|
|
|
|
Hi,
Well if WTL is that great why can't I find any books or references on it ? Nothing on Amazon nor MSDN. It sounds like a 007 library for spy developers . MFC is not perfect but I like it anyway, it's between the beauty and the beast which means you have both worlds.
I can't dig into WTL or ATL if I can't find anything about useful information about it. The 5 articles from CodeProject don't really explain anything about ATL and the WTL one presents that library in its darker side.
Any books or articles I should read ?
Thanks again,
JM
Web: http://goa.ifrance.com
|
|
|
|
|
Jean-Marc Molina wrote:
a 007 library for spy developers
LOL
Jean-Marc Molina wrote:
Any books or articles I should read ?
ATL Internals is very good, and it's not super-advanced like MFC Internals; it makes a good intro to ATL text in fact.
--Mike--
THERE IS NO THERE IS NO BUT THERE IS
MAGIC PIXIE DUST BUSINESS GENIE CODE PROJECT
Homepage | RightClick-Encrypt | 1ClickPicGrabber
"Which comes first, the bug or the stress?" -- Chris Maunder
|
|
|
|
|
Hi Michael,
Thanks for the reference but isn't it too Advanced or "Internal" ? I want somekind of Workshop book. For example one of my all time fav book about MFC and Windows app dev is: Inside Visual C++. I thought "Developer's Workshop to COM and ATL 3.0 by Andrew Troelsen" could be that book. People also adviced me to buy:
WROX - Beginning ATL 3 COM Programming
Microsoft Press - Inside COM by Dale Rogerson
I am also a bit scared because I don't know anything about DCOM nor COM+... Oh my god I feel dumb ^^. But first let's learn a few things about ATL/WTL . Here is a very interesting article about MFC vs ATL/WTL:
http://archive.devx.com/free/mgznarch/vcdj/1999/julmag99/atlinherit1.asp
JM double zero ATL/WTL developer
Web: http://goa.ifrance.com
|
|
|
|
|
I don't know of a workshop-style book (something like The MFC Answer Book) for ATL. The Wrox book you mentioned is also good (that was the first ATL book I bought) and covers lots of ATL topics, although GUI doesn't get covered until about chapter 8.
--Mike--
THERE IS NO THERE IS NO BUT THERE IS
MAGIC PIXIE DUST BUSINESS GENIE CODE PROJECT
Homepage | RightClick-Encrypt | 1ClickPicGrabber
"Which comes first, the bug or the stress?" -- Chris Maunder
|
|
|
|
|
If you tried to create ActiveX or COM with MFC, try the same with ATL.
No ugly METHOD_PROLOGUE hacks, easy and straitforward.
WTL is ok, also heavy templates aren't as easy to read as non-template MFC code.
Brian
|
|
|
|
|
Hi, you dont have to know about COM to learn WTL, ibe wrote several WTL apps, and i dont know jack-S@#t about COM
What you DO need to know about (at least at a basic level) is about Win32 (the windows API), cause WTL is just a thin wrapper around it(unlike MFC, wich almost completely "hides it" from you) You dont know API? No sweat! if you start learning WTL you will "accidentally" learn API!
I think that this is the major advantage about WTL over MFC, you can writte code on MFC with only very basic knowlage on the windows API, but on WTL you MUST know about it, So why is this an advantage? well consider this, if you were asked to write something without MFC, you probably couldnt do it right? cause when you learned about MFC you learned exacly that, MFC! and MFC works rather Differently that the windows API. If however you learn about WTL (and there for W32 API) and you someday need to write an app using something else, chances are that you WILL be able to do it, cause you allready know the very "heart" of windows programming wich is of course... The API.
In the simplest way of seeing the WTL vs MFC debate, i think it all comes down to this:
If you write programs because you have to, because its "your job" and you want to do it in the easiest fastest possible way (that doesnt involve VB , and are confindent that you will NEVER have to use anything else but MFC, then by all means DO use MFC.
BUT, if you write programs because you LOVE IT, and you wanna have full control of whats happening inside them, plus, you recon that you some day might have to use something else to do it, then i pretty much belive that WTL is a good way to go.
On a side note, i actually belive that WTL is easyer to learn that MFC. it took me about 5-6 months plus 3 full size books to get a relatively firm foothold on MFC, and it only took me about 2 weeks and a couple of sketchy online tutorials to learn WTL.
|
|
|
|