|
|
Let me be reword my problem.
In ATL , class CComObject has a static method CreateInstance which gives A pointer to a CComObject<Base> pointer
In similar way , is it possible to get pointer to a running CComObject<Base> ?
I'm pasting snippet from MSDN to make it more clear.
double x;
CComObject<CMyCircle>* pCircle;
HRESULT hRes = CComObject<CMyCircle>::CreateInstance(&pCircle);
_ASSERTE(SUCCEEDED(hRes));
-- modified at 4:33 Friday 31st March, 2006
|
|
|
|
|
May be Running Object Table (ROT) will help you. Check MSDN for further details of its usage.
Have a great day ahead!
Regards,
Sohail Kadiwala
(My Blog - http://blogs.wdevs.com/sohail/[^])
modified 21-Apr-21 21:01pm.
|
|
|
|
|
I have not yet been able to test this, but I'm hoping others may shine some light on this:
Does the 64bit COM subsystem understand InprocServer64 registry keys?
|
|
|
|
|
Read Registry Redirector (Windows) and other related pages.
The basic answer is yes and no.
InProcServer32 is not reflected between 64 and 32 bit DLL registration so they can co-exist.
Keep it simple
dex
|
|
|
|
|
i am getting "Method ~of object ~ failed", when calling a ATL COM object method in my vb+ATL COM App when it is run from VB IDE, however when i run the VB App's Exe ,the vb Form doesn't generate this error:
Thanx in Advance
Z.A
-- modified at 1:12 Monday 27th March, 2006
|
|
|
|
|
How do I know that a COM dll has been created using ATL? What do I have to look for in the Source code to find out?
---
With best regards,
A Manchester United Fan
The Genius of a true fool is that he can mess up a foolproof plan!
|
|
|
|
|
|
Michael Dunn wrote: Look for _Module or CComObjectRootEx or BEGIN_COM_MAP or any other ATL base class/macro.
So you mean that if I find any of the above in the code then the dll is written using ATL?
Thanks for the prompt reply... One of the reasons why I love CP...
---
With best regards,
A Manchester United Fan
The Genius of a true fool is that he can mess up a foolproof plan!
|
|
|
|
|
hi i want to make a transform filter which has only one input but can give two output pins. if i inherit my class from CTranformFilter it give me only one output pin and one input pin.....plzzzzz help me
|
|
|
|
|
Hello.
Does anybody knows, how can i display information about COM(ActiveX) components activity.
I wanna trace all methods and properties in hooked DLLs(ActiveX) like COMslicer(www.comslicer.com).
Tell me please, where can i get sample codes. I looking for the sample codes for 3days. but I did't looked for that.
Thanks.
|
|
|
|
|
Hi!
Recently I've stumbled across a situation I could not explain - does anyone have an idea why this is so?
I had installed one of my applications from a Windows Installer package on a machine while being logged in as administrator and the application worked as expected.
After logging in as a regular user I got an error that a COM object I use couldn't be created and, indeed, the corresponding entry under HKCR\CLSID was not there!
I relogged as administrator and the entry was there again!
Up to then I was under the impression that the HKCR hive is NOT user dependent, but now I'm no longer sure. Can anyone explain this behaviour?
Thanks in advance!
Regards,
mav
--
Black holes are the places where god divided by 0...
|
|
|
|
|
Register your component in HKLM and if you your applications is maintaining the seetings for different user then you can register it under HKCU
Try to register your component in HKLM.
Cheers
Ganesh
Cheers
"Peace of mind through Technology"
|
|
|
|
|
Hi Ganesh!
Thanks for your reply, although unfortunately I can't see how to achieve this.
The component is a third-party control I cannot modify in any way. Calling DllRegisterServer for this component (by using regsvr32, as always) creates the registry entries in HKCR (that's the behaviour I know from each and every COM class I've created or used).
And it doesn't answer the question why HKCR\CLSID seems to be different depending on a special user login...
Regards,
mav
--
Black holes are the places where god divided by 0...
|
|
|
|
|
Even if you were able to register the component somewhere else than HKCR\CLSID, it wouldn't be found when an application calls ::CoCreateInstance() trying to create the component since HKCR\CLSID is where it shall be registered.
What do you know about the target environment? OS version, user rights and so on?
Are you able to open other CLSIDs?
--
Roger
It's supposed to be hard, otherwise anybody could do it!
|
|
|
|
|
Unfortunately, I don't have very much information about the target machine - it was a customer pc which I don't have access to anymore. It was an XP Prof SP1 machine IIRC, running in a hospital environment/network.
At the time I was installing we solved the problem by temporarily giving the user admin rights, reinstalling the application and then switching back to regular user rights again and afterwards I didn't get to dig deeper into their user management.
And yes, we were able to open other CLSIDs, at least another part of my program worked without problems or errors I'd got if some other COM objects and ActiveX controls wouldn't have been accessable.
Regards,
mav
--
Black holes are the places where god divided by 0...
|
|
|
|
|
hi all,
As i develop windows application in MFC and i am new to COM ,
for that which link or book are better to learn COM developement
send reply
-- modified at 5:09 Wednesday 22nd March, 2006
|
|
|
|
|
I have found Beginning ATL3 COM Programming by Richard Grimes pitty useful.
Z.A
|
|
|
|
|
Hi
I am reading about COM nowadays.
how can com achieve method calling between dlls which were coded different languages.
I mean every language has spesific calling convention mechanism.What is the solution to pass this problem?
I don't understan this issue.
And one more:
are there any more problems to call methods between dlls except calling conventions?
Regards.
|
|
|
|
|
COM methods use the __stdcall calling convention. COM compatible languages use the same __stdcall when calling COM methods. There are also various rules on parameter passing.
Steve
|
|
|
|
|
Hello.
I have a serious problem.
In the following codes, I always come to have false return.
Is there any problem in CLSID_UpdateServiceManager?
I have had a successful result by using VBScript, but VC++..
I'm looking forward to your answer.
///////// Always Fail /////////////////////////////////////////////
IUpdateServiceManager* pMgr;
hr = ::CoCreateInstance(CLSID_UpdateServiceManager, NULL, CLSCTX_INPROC_SERVER, IID_IUpdateServiceManager, (void**) &pMgr );
if (FAILED(hr))
{
m_pUnknown_Manager = NULL;
return false;
}
//////// Always Success ///////////////////////////////////////////
hr = ::CoCreateInstance(CLSID_UpdateSession, NULL, CLSCTX_INPROC_SERVER, IID_IUnknown, (LPVOID*)&m_pUnknown_Session);
if (FAILED(hr))
{
return false;
}
|
|
|
|
|
It sounds like the object (CLSID_UpdateServiceManager ) doesn't implement the IUpdateServiceManager interface. I'd wager the HRESULT is E_NOINTERFACE . Try this to convince yourself:
IUnknown *pUnk;
hr = ::CoCreateInstance(CLSID_UpdateServiceManager, NULL, CLSCTX_INPROC_SERVER, IID_IUnknown, reinterpret_cast<LPVOID*>(&pUnk));
if (FAILED(hr))
{
return false;
}
IUpdateServiceManager *pMgr;
hr = pUnk->QueryInterface(IID_IUpdateServiceManager, reinterpret_cast<LPVOID*>(&pMgr));
if (FAILED(hr))
{
pUnk->Release();
return false;
}
pMgr->Release();
pUnk->Release();
It is also possible the object is being accessed cross apartment and the proxy-stub doesn't exist - The object does implement the interface but it can't be marshaled across to the client apartment.
Steve
-- modified at 4:10 Tuesday 21st March, 2006
|
|
|
|
|
Thank you for concern.
I tested the code you sent, but the result is the same as the one which I've already had.
For your reference, the value of hr was -2147221231
See you.
|
|
|
|
|
Yeah, but on which line of my code did it fail - There are comments that say what the problem probably is.
-2147221231 is 0x80040111 in hex (don't quote HRESULT s in decimal!) which has the symbolic name CLASS_E_CLASSNOTAVAILABLE.
Steve
|
|
|
|
|
It was my purpose to convert the following VBScript to VC++ source code.
http://windowssdk.msdn.microsoft.com/library/en-us/wua_sdk/wua/using_wua_to_scan_for_updates_offline.asp?frame=true
The above vbs worked well, but the conversion fell in difficulty just after starting.
I'd had an experience using CLSID_UpdateSession, so I was quite frustrated.
In your convenient time, please check this matter.
Thanks.
|
|
|
|