|
It IS confusing. I would recommend this article: Introduction To COM, Michael Dunn[^], as a preliminary explanation. Also, an excellent review is: Inside COM+ Base Services[^]
As COM evolved, Microsoft released a number of proprietary implementations, and invented new names to distinguish the various, existing libraries. First was OLE, which was released before 1996, with their reigning operating system (Windows 95). You can search MSJ (Microsoft System Journal, the precusor to MSDN Magazine) for introductory articles about OLE for difinitive information, for instance: Don Box, Introducing Distributed COM and New OLE Features in Windows NT 4[^]. ActiveX components are COM components, and usually have the OCX extension (but, can be compiled as a DLL), and were initially intended as Web Page objects, to add functionality to Web sites. Check this out: Build OLE Controls for the Internet That Are Fast, Smart, and Interactive[^]
The problem is that once you release a COM library component, you can't alter it, recompile it, and re-release it with the same name (this usually introduces breaking changes into client applications).
COM classes that export functionality are supposed to be registered in your system registry (and have well-known value keys, like InProcServer). Launch OLE COM Object Explorer OLE COM Object Viewer, MSDN[^](which lives in the Tool folder of your Visual Studio install directory), and investigate the existing registered components on your system to get an idea of just how pervasive this technology.
|
|
|
|
|
Hello all,
One of my works requirement is customizing the context menu in inspector window of a MS outlook.
Details regarding it are as follows:
when we right click on a email-id(the one that is in front of a From: or To ,
a context-menu pops-up.I want to add some items in it.
How this can be done? and what events should be handled?
i am writing a component in vc++ & working with outlook 2003.
reply me on n.chudekar.31@gmail.com
thanks in advance.
|
|
|
|
|
|
I have a COM dll written in c# that is being called from various c++ applications. On only 1 machine so far, I am having the application that calls the COM dll just dissapear and unload. I am unsure what is happening. I have try catches all through the code trying to catch the exception getting thrown, but it doesnt catch, just unloads.
What types of exceptions or security issues would cause the entire application to unload without getting caught? It is worth noting that so far the only applications that are failing are VS6 MFC apps. Apps that are built in VS2005, or that are instantiated in a .net environment do not produce this issue.
The scenario is this. C++ app calls VS2005 dll which holds refrences to the c# COM dll. 2005 dll calls into c# COM which provides webservice access to the caller.
It is also worth nothing that a static method calls a singleton class in the C# COM dll. (Singleton is for websvc access). I know it is not much to go on, but I need ideas about general security problems or COM issues with what I have described, or even what type of exception is uncatchable and unloads the app .
Thanks in advance.
|
|
|
|
|
Usually an app going *poof* is caused by the instruction ptr sending it off into the Twilight Zone.
Most likely your TLB's and DLL's are out of synch. I.e. your application was compiled against a TLB that does not match the DLL.
|
|
|
|
|
Depends what is meant by “poof”. Normally, in the circumstance you describe (“instruction ptr sending it off into the Twilight Zone”), you'll get some kind of “this application has performed an illegal operation and will be terminated” dialog before it’s terminated. There are some situations where the damage to the process is such that the OS can’t get that far and the application simply vanishes without any warning whatsoever. One cause of this is a corrupted EXCEPTION_REGISTRATION linked list.
Steve
|
|
|
|
|
Well... I guess I could have my files out of sync... anything is possible at this point. It is one of those issues that makes you pull your hair out.
I get no information whatsoever from this. I do know from my tracing that it is blowing away in the COM assembly itself, right when it is about to access the webservice. It always goes away at the same place.
It just seems odd that it would only be these 2 MFC apps that would get messed up when at least 8 other applications (VS2005 or .net encapsulated admittedly) use the same assembly.
At first I thought it was a security problem, so I demanded unrestricted permission... and no exception. I just wish there was a way to figure out what was going on. This machine does not have VS and can not have it installed, so I have to debug with tracing. Not very helpful for this scenario.
|
|
|
|
|
What about the debugging tools for Windows (WinDbg, etc.)? These are not as easy to use as VS, but I have been able to find some deep and nasty problems with them. It was a similar situation where I had to debug in release mode with no VS.
modified on Thursday, March 5, 2009 2:57 PM
|
|
|
|
|
hi all
I have a BHO program which tracks visitors on websites
what is the best way to collect the data and send it to my database ? (cookies, AJAX, XML, other )
|
|
|
|
|
Hello,
I'm not sure where the proper place to post this question, so I'll ask it here. I want to set up a class that has properties and sub-properties in VB.net 2008 Express.
Class | 1st Prop | 2nd Prop
Example: iClass.RFWN.OD and iClass.WF.Width
My goal is to make a class library(.dll file) that can be added to a project, which I know how to do. What I'm unsure of is how to link one public property to another. Can all the properties and sub-properties be in one class object or do they need to be in their own? Any help at all would be greatly appreciated, whether it be a small code snippet or just a point in the right direction via an online article or tutorial. I'm fairly new at this, so please, talk down.
Thank you,
Eric.
|
|
|
|
|
i had read this help content in msdn:[^]
IDiscMaster2* pDiscMaster = NULL;
hr = CoCreateInstance(__uuidof(MsftDiscMaster2), NULL, CLSCTX_INPROC_SERVER,
__uuidof(IDiscMaster2), (void**)&pDiscMaster);
but the calling would fail because class has not registered. i googled found the others use this com object like me but no problem. so, how to resolve the problem?
|
|
|
|
|
installing a windows update package with impapiv2, all problems will disappear.
|
|
|
|
|
Is it posssible to create function pointer in IDL file
|
|
|
|
|
You should consider how this function pointer is going to be marshaled. Function Call Attributes[^] might suggest a possibility.
What are you going to do with this function pointer?
|
|
|
|
|
I working on com dll in vc++(not clr)
1st Dll consist of various methods having same signature
2nd dll need to pass the funtion pointer of 1st dll method which is going to execute in 1st dll.
|
|
|
|
|
Sorry, it took so long to get back to you, I don't visit the site every day.
The reason I suggested that you consider how you want the 'function pointer' to be marshaled is that the COM Library is designed to use the RPC mechanism and a proxy/stub architecture to interact with other COM components, whether in the same process, in another thread in the same process, or even another process on a remote machine. I have no way of knowing how aware you are of COM internals,...so, I don't make any assumptions.
The COM Library performs many operations that are invisible to the programmer when you make an activation request (for instance, CoCreateInstance or DllGetClassObject), depending on the server registration and how you configure your apartments. If it's an In-Process Server, you could, hypothetically, pass a 'function pointer' to another DLL in the same process, and the address would be accessible. In practice, this is a really dumb idea. The obvious question is: why not call the method directly? If the Com DLL is in another process address space, any virtual function pointer will be invalid (this will be true even if it's NOT a COM Dll). I'm assuming that you konw all this.
Your question provides the very minimum of information, making it difficult to answer accurately.
...So, what's your point? If you want to define a 'function pointer', go ahead.
|
|
|
|
|
Hi,
I'm using Interop.SHDocVw.dll to print html files on the fly without user interaction. I managed to print if I use administrator privilege, but it will not print if I use power user privilege. There is no print job sent to printer if I user power user groups.
Do I miss some security permission settings? Or is there any COM settings that I missed out?
Thanks.
|
|
|
|
|
Im a newbie for com programming. If i create my com object by ATL wizards, the target com dll can be easily added by C# project using Add Reference operation. But, if i build my com dll by handle, writting all classes and idl file by hands, i will find it can't be added by C#. the error message says:"*** couldn't be added. Please make sure that the file is accessible,and that is a valid assembly or COM component".
Of course the target dll is a COM component! I can use it in any C++ projects successfully. Why?
Regards.
|
|
|
|
|
Its probably because the type library information is not available inside the COM DLL.
You will have to include the library information as a resource for this.
Please read the document on how this is done.
«_Superman_»
I love work. It gives me something to do between weekends.
|
|
|
|
|
oh, thanks for your reply. im reading the book named Inside COM. i hope i will resolve this problem when i learn further.
regards.
|
|
|
|
|
Hi,
I have problems registering an assembly for COM Interop.
There is an option in Visual studio which registers the dll after the build. If i use this option i dont have any probs accessing the managed code thru c++ code. But if i build the assembly and register it thru regasm utility it gives me error "class not registered" in my c++ client. I checked the registry values and they seem to be same in both the cases.
Any idea why this is happening?? anyone know what special VS does??
Thanks in advance.
|
|
|
|
|
'Class not registered' sounds pretty specific. Perhaps you can use one of the regasm options such as /tlb or /tlb /verbose to see exactly what it is generating without having to search around the registry.
Apparently there is a third method, though I've never used it: class InteropServices.RegistrationServices and method RegisterAssembly which might shed some light.
|
|
|
|
|
i want to Do Final(software Engineering) Project involving Com Programming plz Suggest Some Proposals...
Thanks
|
|
|
|
|
I don't want to put you off, but I can see at your first interview a prospective employer asking (rightly or wrongly) "COM is old technology, why didn't you do a project using something more modern?". I saw your post to C++/MFC. Compare the number of queries being put regarding COM and there to get an idea of the demand.
Regarding Stuarts answer there, PortMon was (is) great for Serial Comms so a USB alternative has potential. You'll benifit in your grading if you can show a demand for what you've coded.
|
|
|
|
|
hi...
i am new to serial port programmming...my problem is as folloes...
i have to write a command to a plc connected to my serial port of windows os and then read the data from the same serial port.both read and writre take place continously for every one minute..how do i go about doing this...i am programing using c..
is there any code available for this??
|
|
|
|