|
It depends on few things. Most importantly what bussiness logic is there in B.
For example suppose B function is responsible to read data from a very large file and you want to return that from B. There are changes that file open error may occure then:
int B(CString &out_string) will be best option because of two reasons.
1. The error code can be returned as return parameter
2. You dont need to accumulate the content of file in a local variable which gets added and deleted on stack while transferring that as return value.
Manoj
Never Gives up
|
|
|
|
|
I want to change one folder's icon.How can i do it with shell extension or other ways but except using desktop.ini file.
|
|
|
|
|
Hi guys,
During developing on windows I had to mess with COM a bit.
So I want to know,
How common is the use of COM and ATL?
Are these technologies getting old and only supported by other apps, or there are new software built with these tech?
Thanks!
|
|
|
|
|
marisha.u wrote: How common is the use of COM and ATL? How could we tell without running a survey?
Use the best guess
|
|
|
|
|
Microsoft products still make use of these. If you are developing something that is interconnected for example with office products than chances are good that you have to mess with COM as some programming interfaces of these products are exposed with COM. Sometimes interconnection between 2 softwares written in different languages is the easiest via COM if both language compilers have COM support (this is also dependent on the kind of interconnection - its quite rare when a pipe or loopback socket isn't enough). In my opinion if you are developing your own software then the best is to avoid COM if possible. Keep it simple. Use a technology/library only if it makes your job easier or if it is explicitly requested by your client. Don't use something "just because" its a fashion or because it is used by another product. It can be possible that a famous product uses technology X but the architects are cursing the day of choosing that technology and today they simply cant afford (time/$) getting rid of it. Before you start using something do some research and compare different solutions on a simple example program. Investing the time in this pays off in the long run especially in case of a bigger project.
|
|
|
|
|
You described exactly my situation
I had to mess with COM because of historical reasons, and because I'm working with IE and Windows.
I just wondering how useful it is, and should I use it more in the future?
|
|
|
|
|
I think the answer is in my previous post. Use it if you have to and you don't have a better/easier solution.
|
|
|
|
|
I think that these technologies still using by Microsoft and I think also that they are very important.
but it's not wrong to use a new software builder and coder , they all the same but the new are easier to use.
|
|
|
|
|
Dear friend,
Iam currently developing window application using VC6 and VC2008 and interested to learn ATL, STL, WTL and COM. I have refered many article and tutorial in the net. But I felt difficult to understand the concepts and explanation. Friends kindly suggest me any material or site which many helpful to learn it from beginning.
Thanks and Regards,
S.Shanmuga Raja
|
|
|
|
|
Introduction to COM - What It Is and How to Use It.[^] by Michael Dunn, is an excellent introdiuction, as are his other articles on the subject. Scott Meyers has written some useful books on STL which you can probably find on Amazon. I don't use ATL/WTL so cannot offer suggestions for those. However, I would say that if you find these subjects difficult to understand then it is important to focus on only one at a time.
Use the best guess
|
|
|
|
|
Inside COM by Dale Rogerson (very good intro)
Professional COM Applications with ATL by Sing Li and Panos Economopoulos (more advanced)
COM IDL & Interface Design by Al Major (everything you ever wanted to know about interfaces)
Of course they're all a bit dated...
|
|
|
|
|
hi,
i will suggest to start with Inside COM by Dale Rogerson and then start with ATL/WTL
for STL - start with Nicolai M. Josuttis books/online resources.
regards,
Ajay
|
|
|
|
|
I am trying to use WTL but i need the ATL headers.
I install vs 2012 express and the SDK v7.1.
but I still cannot find the ATL headers.
like: atlbase.h
what I have to do?
and , is the ATL still included in some microsoft packages for free?
|
|
|
|
|
I t6hink you have to pay for one of the full Visual Studio editions, same as MFC.
Use the best guess
|
|
|
|
|
Hi all,
When using jscipt9 (Chakra) from C++ with the AddNamedItem() / GetScriptDispatch() functionality to create a module-like behaviour (context separation) I get E_OUTOFMEMORY from GetScriptDispatch() .
This happens only when omitting the SCRIPTITEM_GLOBALMEMBERS flag with AddNamedItem() , no matter what other flags are given.
I tried already everything, including different flags (all possible flags, not only the known ones), changing the order of calls to IActiveScript , calling it in different states of the script engine, invoking different versions via SCRIPTPROP_INVOKEVERSIONING , implementing all requested interfaces in my IActiveScriptSite etc - no result.
For older versions (means: not using jscript9) of jscript everything works as expected. But as soon as I switch the CLSID to Chakra it breaks.
I posted already on msdn: "AddNamedItem() / GetScriptDispatch() broken in jscript9?" [^] and filed a bug report [^].
You can reproduce with a most simple sample I put on github: https://github.com/IUnknown68/ascptest [^]
My main questions is: Am I doing something wrong? Is there something undocumented I have to do? Or is it really a bug?
Thanks,
imagiro
Edit: Run the sample from the command line with 9 as argument to invoke chakra. Otherwise the old jscript engine will be used.
modified 4-Jul-13 7:03am.
|
|
|
|
|
Hi, I have a critical problem, please help.
I'm developing a web game, which uses ATL based ActiveX control to display the 3d game world. When the game activex control was loaded by IE, a seperate game thread was created and the game HWND was created in the thread as child window of the activeX window. Then a message loop was running in the thread to process game logic, rendering,..etc.
In the game thread, I created a windowless mode Shockwave Flash player COM interface to display 2D content, which uses OleDraw to render the image to a texture.
Ok, All these things runs fine in IETab on chrome, BUT not in the IE! The flash player displays nothing in IE! In fact, some web browser which used IE core does work correctly, except IE!
So what could be the reason, and how can I fix this problem?
BTW: Sorry, my english is not good
|
|
|
|
|
Hi Guys,
Reading about COM Threading since two days..
But still i Couldnt understand Exactly " What is an Apartment ".
Kindly can any one explain in simple terms or show some source to understand more.
Thanks,
TV Krishna Rayalu
|
|
|
|
|
A good description can be found on this MSDN page[^]. Basically it is whether the COM object can support multi-threading or not: crazy Microsoft terminology again.
Use the best guess
|
|
|
|
|
Thanks Richard.
That link is informative.
i could able to understand STA and MTA, i got more discription
on what STA and MTA do then what exactly Apartment is.
Can you please define it in simple words.
Thanks & Regards,
TV Krishna Rayalu
|
|
|
|
|
KRISHNARAYALU wrote: Can you please define it in simple words. Define what? The link I gave you uses fairly simple words, and explains exactly what the difference is. If you do not understand the difference between single-threaded and multi-threaded code, then you should avoid using COM.
Use the best guess
|
|
|
|
|
Richard,
I may missed something vital in that article or Some basic in that concept.
I will re read the article. Thanks for Support.
Thanks & Regards,
TV Krishna Rayalu
|
|
|
|
|
First of all an apartment is an abstract concept, means, there is no physical thing behind. When a thread starts it decides in which apartment it wants to "live". It does so by calling CoInitialize or CoInitializeEx .
An apartment is a kind of a convention how to handle things. A thread that initializes a single-threaded apartment states, that it does not allow any other threads to enter the same apartment. COM knows then, that all objects living in this apartment can be accessed only from this same thread and makes sure that these objects are used only from within this thread.
A thread that initializes a multi-threaded apartment allows other threads. COM knows then, that multiple threads might access the objects in this apartment and relies on these objects to handle thread synchronization by themselfs.
So how do other threads enter the same apartment? Simply also via CoInitializeEx . By requesting a multi-threaded apartment they will automatically resist in the same apartment as the other MTA threads since there can only be one MTA.
So in the end each thread that initializes a STA creates its own apartment, while threads initializing MTA enter the one and only MTA. And the same is of course valid for all COM objects created from this thread.
|
|
|
|
|
|
my code:
class ATL_NO_VTABLE CSysLog :
.....
{
public:
[export]
enum EnumLogLevel
{
LogNone = 0,
LogError = 1,
LogWarning = 2,
LogInfo = 3,
LogDebug = 4,
LogDebug1 = 5,
LogDebug2 = 6,
LogDebug3 = 7,
LogDebug4,
};
......
it takes errors likes:
c1xx : error C3174: ....
LINK : fatal error LNK1250: ...
how to correct it?
|
|
|
|
|
Declare it in IDL e.g.
typedef [v1_enum] enum LogLevel
{
None = 1,
Error = 2,
Warning = 3
}LogLevel;
Use it in an interface parameter if you need to export a method:
interface IMyErrors : IDispatch {
HRESULT GetCurrentError(LogLevel udtLevel,...
...
Compile and and export as a type library or .dll or import the IDL into a .h file
|
|
|
|