|
hi there..
Thanks for the time firstly..
I wanted to know how can u add a shared menu to your active x control..also do we need to attach a verb to be able to use Shared Menus?
kind regards
safee
|
|
|
|
|
Hi,
I hosted a .Net control in an ActiveX control, and the accelerators and the tabbing are not working anymore. Any ideas how to fix this?
Thanks
|
|
|
|
|
Hi,
I´m catching Outlook Events by using the connectin points of the DispInterface.
It all works great, but when there is only on item, for example the last contact, in the folder contact, the event handler doesen´t fire.
What´s the problem and is there any solution known ?
My second question: The event handler does only catch Events for the TopLevel Folders such as Inbox ...
When the user created a subfolder under the inbox the event handler
does not fire.
Can someone pleas help me ?
Thanks a lot, Chris
|
|
|
|
|
I'm working on a project that implements Store Events for Microsoft Exchange server. The result is a DLL project with ATL and MFC support made in
Visual C++ .NET 2003.
Because the Microsoft Exchange events doesn’t have support for managed code the application code is unmanaged . This application for listening the events must be registered in Component Services according to MSDN examples.
I registered the dll manually in Component Services , I tested it and it works, but I want to make a setup for this application and here I have two problems:
The first problem is that I didn’t succeed to add the COM application in component services automatic from setup without doing this manually.
The second problem is that using MsiOpenPackage I
must give the absolute path where the msi file is, and I want to set a relative path or if I am using MsiOpenProduct in an application that is added at Custom Action Editor ->install is returning following error: ERROR_UNKNOWN_PRODUCT.
Alin Ilie
Software Developer
BluePhoenix Solutions
|
|
|
|
|
Hi all,
I dont know a lot about COM or DLLs but i am developing a DLL and want to get some thing done.
I am developing a DLL in Visual C++, which i eventally want to use in VB..
I want the VB application to know of some events occuring in a DLL. For example progress of a function in DLL being sent back to the application for showing log or progress bar or anything like that.
Can any one tell me how to do it.. any starting points, any clues would be great as well
Kind Regards
Siddique Ahmed
Senior Software Engineer
Telelogix Software
(www.telelogix.com)
|
|
|
|
|
Hi there,
It is really very easy to implement events in your COM DLL.
whenever u insert any ATL object in your ATL project, using ATL Object Wizard.
ATL Object Wizard property box pop ups, go to attribute tab and select the check box "Support connection points"
this will create an dispinterface which can contain ur event methods.
now u have to simply add method in this interface. compile ur code . and then in class view select ur class which is going to implement this evennt interface, right click on it and add implement Connection point. a dialog box will pou up , select that event interface and click OK.
Now just fire this event method from ur code.
In ur VB client when just select ur Dll object .
and it will list out all event methods implemented by ur dll Object.
u can simply slect those event method and can code whatever u like.
Abhishek Srivastava
Software Engg (VC++)
India ,Noida
Mobile no 9891492921
|
|
|
|
|
Hi,
I'm new to COM tech. My few COM experiences are just a few OLE Automation samples in MFC. But now I have a Project that will require me calling an object mtd across machine boundary.
Can I achieve this in MFC 7.0? If yes how?
Thanks in advance!;)
What would life be without programmers and salesmen?
|
|
|
|
|
I recommend this book if you want to really develop COM servers.
Developer's Workshop to COM and ATL 3.0 by Andrew Troelsen
Kuphryn
|
|
|
|
|
Before I self inflict an almost certainly painful COM education, I was hoping to get some opinions on the vitality of COM. Has COM seen it's glory days, or is it a technology still worth learning inside & out?
Thanks for your ideas,
Paul
|
|
|
|
|
It's still worth learning. If you're thinking of .NET, .NET is not a replacement for COM - merely an evolution of it. In fact, the CLR (Common Language Runtime) uses some COM technologies to make everything work and interop in a good manner.
Also, many applications for Windows - including parts of Windows itself, like the shell - are written in COM. To make shell extensions - at least until Longhorn (and that's still a long way away, so who knows how it'll change) - you still need to use COM. Even using automation (runtime discovery) with Office, VBA, and scripting technologies (like the Windows Script Host, or even DHTML-scripting) uses COM and understanding what happens behind the scenes helps with that automation (but isn't required). If you want to add scripting capabilities to your application or to use embedding (OLE), you need to know COM.
It's all over, and, IMHO, it's definitely worth learning. Just stock up on asperin!
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|
Hi,
I am well done by responding COM events with simple data types( say VTS_I4). However, on topic that is not covered anywhere (and I spent days looking) is when the event has a COM object as a parameter. Say for instance in your sample that the addition is not on 2 integers but on 2 matrixes. The OnAdditionDone event would therefore pass a IMatrix * obj (VT_DISPATCH) pointer instead of an integer (VT_I4).
How would you implement the event handler on the client side, and how would you actually start using the IMatrix pointer to access its members (tried everything I could think of, wither it doesn't compile or compiles but crashes, always get the 'first chance exception (OLEAUT32.DLL): 0xC0000005: Access Violation.). In other words, how to complete this:
void CCoCaller::OnAdditionDone(IMatrix *result)
{
// How to implement this so that it works:
BSTR str; result->get_Name(str);
}
MSDN gives 2 samples on how to implement IDispEventSimpleImpl and IDispEventImpl using Word and Excel veents, none of them show events that pass COM objects as parameters.
Any help would be very useful. Thanks a lot
|
|
|
|
|
Hi there ,
once i have tried the same also..and it worked fine.
Suppose i have to pass IInterface instance to the client thru a Event method ThrowInter(IInterface *iFace)
this is the code where i fired this event and passed the IInterface pointer.
IInterface *iFace;
CoCreateInstance(CLSID_Interface, NULL, CLSCTX_ALL, IID_IInterface, (void **) &iFace);
Fire_ThrowInter(iFace);
Now this is my client code where i caught the fired event and IInterface instance
void CContainerDlgDlg::OnThrowInterTinterface1(LPDISPATCH interfac)
{
IInterface *iFace=reinterpret_cast<iinterface *="">(interfac);
iFace->ShowMessage();
}
but in client i have to include the header file of IInterface.
and then simply reinterpret casting , i was able to access my IInterface methods and properties
let me know if u r also doing the same
Abhishek Srivastava
Software Engg (VC++)
India ,Noida
Mobile no 9891492921
|
|
|
|
|
You really shouldn't do that, it's the kind of thing that gives COM a bad name. Better would be to get an IDispatch from the object and fire that, then use QueryInterface at the client end, or use IUnknown and do the same.
If you remote (out of proc or off-machine) interfaces, then there is postively absolutely NO guarantee that your cast is safe, since a proxy/stub may well have only the same number of methods available in an IDispatch interface, and the rest of your interface's function table may/will be inadmissible.
Steve S
|
|
|
|
|
The key is I do not have the source code for the COM nor the header though. So I cannot include the header. Thanks for your suggestions anyway.
|
|
|
|
|
Thanks so much, Abhishek!
I got it done, the trick is I need to declare the LPDISPATCH and convert to my desired COM refrence type explicitly. However, I declare the handler function the same as what is described in .tlh!
I want to correct is that you don t have to get the COM header, what you need is simply import the dll and use the smart pointer.
|
|
|
|
|
I think that you should write
BSTR str;<br />
result->get_Name( & str );
Or better
CComBSTR str;<br />
result->get_Name( & str );
With best wishes,
Vita
|
|
|
|
|
Hello
We have a big problem with our System.
We developed a Web-Side with IIS and ASP and a Automation-Dll(COM) written in MFC 7.0. A User can login and the ASP creates the COM-Object in the ASP-Session-object. All Information are stored in the Com-Object. It's installed as in-Process and the COM-Object is set to Neutral-Threadingmodel.
Now, when the COM-Object crash, sometimes the IIS restarts and all User have to login again. Sometimes the IIS can't restart and we have to restart the W2k Server.
I changed the settings in the IIS to Out-Process (so it isn't in the same memory) but nevertheless the IIS restart on any COM-Object-Crash.
What is the best way to develope a big existing MFC-Application to a COM-Object and using it as a WEB-Application with ASP. There are about 100 USer in the same time online....
Volker
|
|
|
|
|
To prevent IIS crash, you could try to register your com object in COM+ as a "Server" application. Here is what you need to do:
1. Register your com object.
2. Create a blank COM+ app, make sure it is a "Server" not a "Library" app.
3. Import your com object (add it as a component to the COM+ app).
Then you can use it in your ASP pages (by calling CreateObject). The com object will not be running within the IIS process. You have to test whether this solves your problem or creates a new problem, etc.
The best approach is to fix the bug so that it won't crash, of course.
Good luck.
My articles and software tools
|
|
|
|
|
Hi,
I have a doubt. Can we make use of a component developed in 16 bit Operating system in 32 bit O.S. If yes, then how does a 16 bit component will be resolved in 32 bit O.S ? Is there any work around to call 16 bit component in 32 bit component ?
Please give me a brief solution with example,if possible.
Thank you
|
|
|
|
|
Hi dear
u can call a component devloped in 16 bit OS in 32 bit OS using Thunking mechanism.
there are 32-bit Generic Thunk Functions using which u can call ur component.
One can also access the component devloped in 32 bit os in 16 bit OS ,using the same thunking mechanism for which u have to use 16-bit Generic Thunk Functions.
u can refer to "THUNKING" topic of MSDN.
Abhishek Srivastava
Software Engg (VC++)
India ,Noida
Mobile no 9891492921
|
|
|
|
|
I have a COM object I'm using in an ATL project. One of the COM object's exposed interfaces is called IWTonload. According to the COM object's documentation, a class implements the IWTonload by having a method in the class called .onloadComplete.
In Java, I would go
<br />
public myClass implements IWTOnLoad<br />
{<br />
...<br />
void onLoadComplete()<br />
{<br />
}<br />
<br />
}
In C# I would go
<br />
public myClass: IWTOnLoad<br />
{<br />
void onLoadComplete()<br />
{<br />
}<br />
}
How would I implement this IWTOnLoad COM interface in a C++ ATL project? Any help is greatly appreciated.
The graveyards are filled with indispensible men.
|
|
|
|
|
Hi there ,
In ATL it can be done very easily , insert an ATL class in ur project .
Now insert ur component in the same project .
In Class view , right click on ur ATL class , a menu will pop up , click on inplement interface.
now browse for ur interface select it and click on implement.
Abhishek Srivastava
Software Engg (VC++)
India ,Noida
Mobile no 9891492921
|
|
|
|
|
I've heared about such a tool by Microsoft, but I can't find it.
I need to monitor all the COM/RPC calls a process makes...
thanks
|
|
|
|
|
Because it doesn't to me.
Exception:----------------------------------------------------------------------------------
An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in Test Form exe Additional information: COM object with CLSID {3050F48A-98B5-11CF-BB82-00AA00BDCE0B} is either not valid or not registered.
From Registry:------------------------------------------------------------------------------
[HKEY_CLASSES_ROOT\CLSID\{3050F48A-98B5-11CF-BB82-00AA00BDCE0B}\InprocServer32]
"Class"="mshtml.CEventObjClass"
"Assembly"="Microsoft.mshtml, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"RuntimeVersion"="v1.0.3705"
[HKEY_CLASSES_ROOT\CLSID\{3050F48A-98B5-11CF-BB82-00AA00BDCE0B}\InprocServer32\7.0.3300.0]
"Class"="mshtml.CEventObjClass"
"Assembly"="Microsoft.mshtml, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"RuntimeVersion"="v1.0.3705"
From Gacutil /L: (GAC)----------------------------------------------------------------------
Microsoft.mshtml, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, Custom=null
And Finally my own investigation of 3050f48a-98b5-11cf-bb82-00aa00bdce0b using---------------------------
Dim csCEventObjCLASS As New Guid("3050F48A-98B5-11CF-BB82-00AA00BDCE0B")
Dim C_CEventObjCLASS As Type = Type.GetTypeFromCLSID(csCEventObjCLASS, True)
CLASSName mshtml.CEventObjClass
IsClass) TRUE
IsCOMObject) TRUE
IsInterface) FALSE
IsPointer) FALSE
Namespace) mshtml
Module) MSHTML.dll
Name) CEventObjClass
GUID) 3050f48a-98b5-11cf-bb82-00aa00bdce0b
Assembly) Microsoft.mshtml, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
Assembly.Location) c:\winnt.0\assembly\gac\microsoft.mshtml\7.0.3300.0__b03f5f7f11d50a3a\microsoft.mshtml.dll
Assembly.CodeBase) file:///c:/winnt.0/assembly/gac/microsoft.mshtml/7.0.3300.0__b03f5f7f11d50a3a/microsoft.mshtml.dll
Assembly.GlobalAssemblyCache) TRUE
Assembly.FullName) Microsoft.mshtml, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
Assembly.GetCallingAssembly) System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Assembly.GetEntryAssembly) Test Form Focus, Version=1.0.1434.13227, Culture=neutral, PublicKeyToken=null
Assembly.GetExecutingAssembly) Test Form Focus, Version=1.0.1434.13227, Culture=neutral, PublicKeyToken=null
Assembly.GetExportedTypes) System.Type[]
Assembly.GetFiles) System.IO.FileStream[]
Assembly.GetLoadedModules) System.Reflection.Module[]
Assembly.GetManifestResourceNames) System.String[]
Assembly.GetReferencedAssemblies) System.Reflection.AssemblyName[]
Assembly.GetModules) System.Reflection.Module[]
AssemblyQualifiedName) mshtml.CEventObjClass, Microsoft.mshtml, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
FullName) mshtml.CEventObjClass
Thanks, GregC
|
|
|
|
|
I don't think it's a matter of registration. After all Microsoft.mshtml is the interop assembly for InternetExplorer's mshtml.dll, and this wasn't registered Internet Explorer wouldn't work.
This exception can be thrown more about an interop issue (bad use of objects or interfaces, or even if the object inside is not yet initialized.
When I had this kind of issues last year, I tried adding code to my code sequence (even with stupid method calls) only to make sure the underlying objects were initialized and valid.
Good luck!
RSS feed
|
|
|
|
|