|
I have aggregated IID_IInner and IID_IEnumVARIANT as follows
COM_INTERFACE_ENTRY_AGGREGATE(IID_IInner, m_pInnerUnk)
COM_INTERFACE_ENTRY_AGGREGATE(IID_IEnumVARIANT, m_pInnerUnk)
How do i call CoCreateInstance(...) in FinanConstruct() method?
|
|
|
|
|
|
IEP_SimpleObjPtr pEP_SimpleObj1;
pEP_SimpleObj1.CreateInstance(__uuidof(EP_SimpleObj));
IEP_SimpleObj1Ptr pEP_SimpleObj2;
pEP_SimpleObj1->QueryInterface(__uuidof(IEP_SimpleObj2), (void**) &pEP_SimpleObj2);
pEP_SimpleObj2->Release();
In the above code I have released pEP_SimpleObj2 pointer.
But still I can call methods using pEP_SimpleObj2 pointer. How?
|
|
|
|
|
As the object is also referenced by pEP_SimpleObj1, Releasing pEP_SimpleObj2 will probably only decrease the object's reference count to 1, so the object will still exist. If pEP_SimpleObj2 is just pointing within the object pointed at by pEP_SimpleObj1 (highly likely), then so long as the address held in pEP_SimpleObj2 hasn't changed, the pointer will still point at valid memory.
The point is that you cannot rely on this behaviour - it is NOT guaranteed. So don't do it.
Also - the whole point of managed pointers is that you don't need to bother with AddRef and Release - let the pointer objects do that for you in their constructors/destructors.
|
|
|
|
|
Yes we don't need to release managed pointers.
I tried to check how released pointers will work.
Its clear now. Thanks for your explanation.
|
|
|
|
|
Hi to all. I'm trying to open some project wroted using WTL. When I try to rebuild it (using VS2008 on Win XP) I get the compile error as above. Now, "atlres.h" file is in directory which I added to my project settings properly and I don't know why error appears!?
The message states "cannot open.." which means it has no trouble locating it? but rather cant open it?
Please help!
Thanks in advance.
|
|
|
|
|
I think you need to add the WTL include directory to the include directory path for the resource compiler. Right-click on the project, select 'Properties', select Resources->General in the properties window and add the WTL include directory to Additional Include Directories.
|
|
|
|
|
Thanks for replaying to me. I already have directory path (D:\...\WTL80\include) included in Aditional Include Directories.
?
|
|
|
|
|
In the Additional Include Directories for the resource compiler? I'm NOT talking about the C++ compiler options...
|
|
|
|
|
In 'MyProgram' Property Pages under C/C++ General Additional Include Directories.
|
|
|
|
|
OK I got you.
Stop complaining about that.
Thanks big time!
Now I get:
"fatal error LNK1104: cannot open file 'C:/Program Files/Microsoft SDKs/Windows/v5.0/Lib/DnsAPI.Lib'" ?
|
|
|
|
|
That's a completely different matter - if you really need DNSAPI.lib, what I'd do is open a Command Prompt window, and execute the following commands:
CD /d "c:\Program Files"
dir /s/b dnsapi.lib
It might take a while to run, probably, but it'll likely find any DNSAPI.lib you have. On my machine, I get the following output:
C:\Program Files\Microsoft SDKs\Windows\v5.0\Lib\IA64\DnsAPI.Lib
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib\DnsAPI.Lib
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib\x64\DnsAPI.Lib
C:\Program Files\Microsoft SDKs\Windows\v6.1\Lib\DnsAPI.Lib
C:\Program Files\Microsoft SDKs\Windows\v6.1\Lib\IA64\DnsAPI.Lib
C:\Program Files\Microsoft SDKs\Windows\v6.1\Lib\x64\DnsAPI.Lib
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Lib\DnsAPI.Lib
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib\DnsAPI.Lib
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib\AMD64\DnsAPI.Lib
You can see that (for some reason - I don't know why!) I only have Itanium libraries under C:\Program Files\Microsoft SDKs\Windows\v5.0.
|
|
|
|
|
Is there any way you can get him to take another one, like second from v6.0A for example?
|
|
|
|
|
Yes - in the project properties, under 'Linker', you can tell the linker what directories to look in.
Alternatively, you can add them under Tools->Options, somewhere near the place where you can say what C++ include directories to use.
|
|
|
|
|
Tried it in both places but still no improvement (in tools options even when I pull it up at the top of list)!
Error:"fatal error LNK1104: cannot open file 'C:/Program Files/Microsoft SDKs/Windows/v5.0/Lib/DnsAPI.Lib'"
But big thanks for you anyway.
|
|
|
|
|
Sounds like something has the whole of that path hard-coded.
There might (might!) be a #pragma comment(lib, "C:/Program Files/Microsoft SDKs/Windows/v5.0/Lib/DnsAPI.Lib") somewhere in your code or the code you #include ?
|
|
|
|
|
I agree it looks like hard-coded line of code because no meter what directory path I add, both in 'project property->linker->additional library directories' or 'tools->options->VC++directories(under library files)' I'm getting the same error:
"LINK: fatal error LNK1104: cannot open file 'C:/Program Files/Microsoft SDKs/Windows/v5.0/Lib/DnsAPI.Lib'"!
But can't find where in my code I'm doing that. I inherited this project from another person and on his machine everything works just fine.
???
|
|
|
|
|
Problems are solved, I get the project working!
Thanks for helping me around!
If I have any future question al be sure to post it here.
Once again thanks!
|
|
|
|
|
I am facing the same problem u faced..but i am not getting the solution.
the error i got is:
fatal error LNK1104: cannot open file 'C:/Program Files/Microsoft SDKs/Windows/v5.0/Lib/DnsAPI.Lib'
please help me..
thanks in advance..
|
|
|
|
|
Hi,
it was a long time ago, but if I remember correctly I had to recreate the workarounds (folder states/names/positions) as the person who redistrict this project to me. For example I placed all folders needed in my 'D:\MyProject\...' while on his PC it was placed on 'C:\' drive each folder for himself. I know this may seem odd (especially if you link everything properly ) but it worked.
The thing was there was many files to edit and rebuild for things to work this seamed to be the easy way!
Best luck to you!
|
|
|
|
|
CComObject<CMyCircle> *pCircle;
HRESULT hRes = CComObject<CMyCircle>::CreateInstance(&pCircle);
IMyCirclePtr pCircle1;
pCircle1.CreateInstance(__uuidof(MyCircle));
Difference between pCircle & pCircle1?
|
|
|
|
|
(Presuming CMyCircle is a proper COM interface) - pCircle1 is a managed pointer (it calls AddRef and Release when necessary). pCircle isn't, so you have to call AddRef and Release when necessary.
|
|
|
|
|
I need smtp2 code..in oder to send mass email address at a time....
|
|
|
|
|
i need mass sender to in box ..
|
|
|
|
|
And this has what connection to ATL/WTL/STL?
|
|
|
|