|
I am developing a product on COM and i want to have a seperate dll which provides error handling features.
The existing existing framwork consists of one dll and the exception handling is carried out in the same dll using atlreporterror() and the customised HRESULTS are generated using MAKE_HRESULT.I want to have a seperate dll which is to be implemented using Monikers.My idea is to store all the product specific error codes in a table in the database and my error handling api should retrieve the appropriate error messages from that.
My question is whether it is useful to build such a framework using IMoniker or you have any suggestions for me regarding this?
praveen
|
|
|
|
|
Hello all,
I’ve been trying to get my mind around the following issue in COM: The use of the [dual] parameter when defining interfaces. I’ve read all (....well a lot of) the text on it, but haven’t really found my answer.
Let me tell you what *I* understand (correct me if I’m wrong):
1. dispinterfaces are the same as interfaces inherited from IDispatch.
2. Interfaces derived from IDispatch use Invoke to call methods, while IUnknown derived interfaces use VTables.
3. Using [dual] makes an interface able to use both VTable and Invoke.
....so here comes the problem.
If I define an interface (IDispatch derived and NOT using [dual]) and defined it as a [source] in a coclass then VB is happy to see the events. Yippie! If I use the [dual] parameter on that interface then VB does not like me and won’t see the events?
So my first question is WHY DOES VB not see the events if it is marked as [dual]? Secondly WHY would one ever really use the [dual] parameter….I don’t see where it is useful?
Anyway….any (helpful) comments would be appreciated!
D.
|
|
|
|
|
Hey Daniel,
I'll try and help with what I understand about disp and dual interfaces.
1. Disp interfaces are not derived from IDispatch, they are IDispatch. The automation client will only be aware of the disp interface, and this wil be the only means of communication between automation clients and your object.
2. Disp interfaces will use invoke to call methods of your object, and they will use GetIDsofNames to discover at run time the methods and properties exposed through the IDispatch interface. IDispatch is in fact derived from IUnknown, however, as are all COM interfaces. So, you are in fact using a VTable if you use IDispatch, but you are using a VTable to the IDispatch methods, not the specific methods of your interface (IMyObject or whatever).
3. Using dual means that your object will implement an IDispatch interface as well as a custom interface. Methods of your object will be available both through the IDispatch interface and through its custom interface. Methods accessed through the custom interface will be accessible directly through the interface pointer (VTable), while methods accessed through the IDispatch will have to be accessed through the slower Invoke method of IDispatch. The invoke method basically just imposes the same signature on all of the methods of your object by packaging all parameters to the method in a variant array. So you lose speed with the dispatch, and also sacrifice a little bit of type safety, in that it's no longer possible to check the parameters to a method at compile time, so it's possible to send the wrong number and types of arguments to a call to IDispatch::Invoke, and get a return value of E_INVALIDARG. A single interface does not use both invoke and a direct VTable. The IDispatch interface exposed by your object implements the Invoke, etc., while the custom interface(s) expose whatever methods they wish though the VTable.
Event source interfaces are pure disp interfaces by convention, not dual or custom. The event source interface should be a separate disp interface. Note that this is an outgoing interface, so this means that the event interface is published by your object, but the methods are implemented by the object that wishes to receive the events. When your object fires an event, it is actually calling a method of the source interface implemented on the receiving object. You may implement multiple event sources on a single object, but I think usually one is probably enough.
Using a dual interface allows C++ or other custom clients the ability to access the faster custom interface of your object, while at the same time allowing automation clients the ability to use your object through its dispatch interface (things like VBScript). When you use the dual interface, there's no extra work required on your part to support IDispatch, so it's basically for free. If your object will never be used through an IDispatch interface, there is no benefit to using dual interfaces, but they offer the most flexibility and portability.
I hope that helps.
|
|
|
|
|
I want to be able to embed a text file into a rich edit control when the operator drags a file into the control. At the moment it appears that a link is inserted into the rich edit control rather than the file itself. This means if the original file is deleted the copy of the file in the rich edit control cannot be edited. Can anybody point me at an example of how to do this. I have got as far as implementing the callback interface so that I know when a file is being dropped but I dont know where to go from there. I have tried looking through MSDN but I have been unable to find a good explanation of how the facilty works.
Thanks for any help you can provide.
Steve.
|
|
|
|
|
I'm trying to call a C# method from a VB6 Compontent (which is being called by an
unmanaged C++ app). When I try to call the C# method I get the following error:
Run-time error '-2146233054 (80131522)':
Unable to locate assembly 'myMessage, Ver=0.0.0.0, Loc="", SN=null' which is the
server for CLSID '{06370F98-C096349A-90B2-B841950CFC42}'
Anyone got any clues?
---------------------------------------
"Desire is not an occupation"
|
|
|
|
|
Hi!
A short question:
Is it possible to use default values on parameters definied in the IDL file?
/Christian
|
|
|
|
|
Use the [defaultvalue] attribute:
[id(1), helpstring("")] HRESULT Test([defaultvalue(0)] long Index);
--------------
"Criticism is often constructive because it makes you feel superior when you give it"
-- Dogbert
|
|
|
|
|
http://msdn.microsoft.com/library/default.asp?URL=/library/psdk/cossdk/pgappsntservice_9cpx.htm
"With the release of Microsoft® Windows® 2000, 64-bit Edition, Component Services provides developers with the ability to configure a COM+ server application as an NT service and to implement the service as a COM+ server application by using the Component Services administrative tool."
only 64-bit edition?
why not 32-bit edition?
there is no way?
I want Always Running and Automatically start my component when reboot
best regards
HyungMin Kwak
|
|
|
|
|
Dear All,
how to get the com guid directly from its dll or exe file? Maybe is it the question how to get the com guid through searching the registry for the dll or exe file ?
Thanks a lot
|
|
|
|
|
This assumes you know the ProgID
Mike
{
ISomeObject *pISomeObject = NULL;
CLSID clsid = {0};
HRESULT hr;
...
//
// Create some object
CLSIDFromProgID( L"SomeObjectProgID", &clsid );
hr = CoCreateInstance( clsid, NULL, CLSCTX_ALL,
__uuidof(ISomeObject), (void **) &pISomeObject );
...
}
|
|
|
|
|
Dear All,
how to get the com guid directly from its dll or exe file? Maybe is it the question how to get the com guid through searching the registry for the dll or exe file ?
Thanks a lot
|
|
|
|
|
Dear All,
how to get the com guid directly from its dll or exe file? Maybe is it the question how to get the com guid through searching the registry for the dll or exe file ?
Thanks a lot
|
|
|
|
|
If you need a utility that generates a windows help file automatically from
a type library, you might want to take a look at Oberon TLB Tools utility:
http://www.vakcer.com/oberon/products/tlbtools/
This utility includes 3 tools:
TLB2HLP - generates a complete WinHelp project containing .rtf, .cnt, .prj,
and other files ready to be compiled into a .hlp file. The .rtf file
contains help topics on each objects, method, properties, etc. with
descriptions, place holders for code samples, etc. A good start to create
full online help for a COM object model or ActiveX control properties.
TLB2HTML - creates an HTML file containing all type information from a type
library with cross-references, object index, and so on...
TLB Compare - compares two type libraries and writes differences as an HTML
file.
You can find examples of how each of the tools work on the web page given
above...
I hope this is helpful...
--
Alex
----
Do you still use a stopwatch to track your project time?
Why not try a completely automatic time tracking and billing
application for Windows - VAKCER Project Tracker v2.1?
Get your free trial copy today at http://www.vakcer.com
|
|
|
|
|
Hello Every one..
I am new at COM.. I need to develop a project in ATL ADO database connectivity. Can anyone provide some quick help in form of good link or matter..
|
|
|
|
|
I need to detect if a local server is running. I do not have any reference to it, so I can not detect if the server is running by just calling a method of one of it's interfaces. If I would use CoCreateInstance I still would not know if the server was active before I called it as I would launch it myself. Does anyone know a sollution for this problem?
|
|
|
|
|
I have written an ATL com dll that manipulates some data, but now I want to add a Dialoge to the Dll to display the data ect... I have gon through the wizard and inserted an ATL dialoge but I am not too sure what I have to do now. It does not have an interface or anything like that so how am I supposed to display the dialoge from the calling application. How do I add any of my com objects to the dialog class, its doen't seem to like it at the moment.
If anybody has any any demos that would be great.
just in case anybody noticed - I added this to the VC++ thread, I think it was a cry for help !!
Cheers
Andy C
|
|
|
|
|
I'm not sure of the standard way to do this but I usually create a simple object with a ShowModal method and add some code like this,
m_dlg.DoModal()
Then I create instance of my object in my calling applications and make a call to the ShowModal message.
Hope this helps,
Michael
|
|
|
|
|
Michael, you are correct. The right way is to instantiate dialog object and call DoModal () (for modal) or Create() for modeless dialog.
Hush..Hush.. thought I heard you calling my name now...
|
|
|
|
|
I am creating a COM component in Vc++ and it is going to be accessed from a Web Page. I have a method
in this Com component which is set up to return a result and error.The IDL looks something like this.
HRESULT myMethod([in] BSTR bstrIn, [out] BSTR *error,[out, retval] BSTR* pbstrOut);
I am able to sucessfully get the value when I make the call in VB/aSP
with
rtval = obj.myMethod(In,out)
But the value of "out" does not change it stays the same value that it was set before the call inspite of me chaning it inside the COM component. Do I need to do anything special to get the value out. I checked the web but they do not have any samples for IDL constructs [out] or [in,out]. Please let me know if anybody has tried it or how to get the results.
Krush
|
|
|
|
|
That is very simple....
I think that the problem is in VC side. In the function MyMethod.
How You return the *error and *pbstrOut values?
Carlos Antollini.
|
|
|
|
|
I am changing the content of
*error = _bstr_t("Error......");
*pbstrOut = _bstr_t("Result......");
The value in pbstrOut is returned but not the one in error. What do I need to do return both the values.
Krush
|
|
|
|
|
In the IDL, do [out, string] BSTR* error.....
In the function try the following:
CString strLastError = _T("Error............");
::SysFreeString(*error);
*error = strLastError.AllocSysString();
Cheers!!!!
Carlos Antollini.
|
|
|
|
|
Is it possible to have developer studio regenerate my activeX control wrappers, after I make changes to them (add properties and events), short of totally removing the controls from your project and then reinserting them? I am writing the controls using ATL (beginner) and my projects are MFC based. The generated code says the following comment:
// Machine generated IDispatch wrapper class(es) created by Microsoft Visual C++
// NOTE: Do not modify the contents of this file. If this class is regenerated by
// Microsoft Visual C++, your modifications will be overwritten.
// Dispatch interfaces referenced by this interface
Thanks in Advance,
John
|
|
|
|
|
Hi all,
I would like to know how to create an IM like application? How does an Instant Messenger work? What should I be reading (and where)? I would like you to share your ideas with me.
TIA,
Hush..Hush.. thought I heard you calling my name now...
|
|
|
|
|
To build a simple messenger system, you basically need to program a server and a client (like the IM that you download and install)
The server is listening for messages from the clients. When it receives a message from a client, it forwards it to the right client. The clients listen for messages from the server, when they receive them they alert the user.
It's not that hard to build a simple message system in for example Visual Basic or Delphi, what you have to learn is how to use network sockets. I would recommend you to buy a good book on it, usually you can get enough code from it to create a basic message application.
/_henrik
Henrik Sternberg, Consultant
Cambridge Technolgy Partners, Germany
www.ctp.com/ce
henrik.sternberg@ctp.nospam.com
(take away nospam)
|
|
|
|