|
I tried to use instance from file, not from registry.
I wonder I can use CoCreateInstanceFromFile method for this situation.
I found this method return E_INVALIDARGS but I don't know why.
Please help me, thank you.
Example code I used:
HRESULT hr;
CoInitialize(NULL);
IMyObject myObject; // IMyObject : IUnknown
MULTI_QI qiResult[256];
hr = CoGetInstanceFromFile(NULL,NULL,&myObject,
CLSCTX_INPROC,STGM_READ,
_T("MyAllObjects.dll"),256,qiResult);
...
CoUninitialize();
|
|
|
|
|
I have the storage opened using StgOpenStorage using the flags STGM_READWRITE|STGM_TRANSACTED|STGM_SHARE_DENY_WRITE. Now is it possible to thread the writing activity to various streams in the same appln?
|
|
|
|
|
Is Agregation the solution to the following problem :
I have many resembling activex controls (third party components with their SDKs) ( resemblance in functionnality). they are controls that controls different types of IP Surveillance Camera. I need to develop an application that is independent of them, ie access them independently, so that when i add new control for a new camera, the application needs not be recompiled. so the code has to be external to the application, more than that the linking should be explicit and at execution time rather at load time.
I tried using a DLL which contains a Cwnd object that embeds the activex control in order to declare the EventSink map there and be able to capture events and then relay them to the application by telling the Dll to link to its caller module.
but i did'nt even succeed to make calls in the direct sense, ie application-->exp Dll functions-->Cwnd member functions-->activex specific members, so to create the object etc, the problem being MFC-class pointer can't pass between app and Dll !!?
So how to encapsulate the different activex components in an abstract one. i tried to see COM, but unsuccessfully: is there a sort of activex control inheritance at least (derivation)? Or can I apply containment ( by creation of new activeX control or a general COM component which would contains an object of the particular ActiveX)
here's some other details (Note for the ActiveX control I can access them via C++, by building an MFC proxy class ( Create New class-->MFC class from ActiveX ) then integrate that class into a container where i insert the EventSink Map. Well i succeeded 100% in integrating evry control, and capturing its events, etc, but it's just about encapsulation)
the details :
"
the activex control i'm talking about are as i understood a sort of COM objects, which are to me classes that can be instantiated at execution time, so the dll needs not an implicit link to the client exe.
i have an application that access different camera on the network through those particular activex control, the code being like this :
for example for an axis camera, in the main view window i call
m_Axis.Create(...,this,CRect(..),..); ( m_Axis being here an object of an MFC proxy class to an activeX control (Axis Camera Media Control)).
and of course i handle the onsize member function :
so you can see that the activex control is even responsible for rendering the video stream. other members do the connection, allow me to get a handle to the image being displayed, etc.
so my problem is that i do'nt want the code to be integrated into my application, in order for the application not to depend on those control. so i want some sort of specification such the application can load and talk independently to those objects.
the code would look like :
CcameraControl *_cam[5];
and when the user adds a camera to be controled by the application, a dialog prompting for its ip address, and very possibly its type, appears, then i use the type information to localize the control which is then loaded into a case of the table above.
so i need to encapsulate, create new controls for evry activex, such that those control have the same functions and can talk to the caller-application using a same mechanism.
here's what i tried :
i thought i must derive new classes from the activex control, such those classes have the same functions. they need to relay the control from the application to their parent specific services. and capture events back from their parent and relay them to the application, but here i came to the inevitable ad the impossible :
although succeeding in encapsulating the controls into uniform components, there is no WAY for those classes to be loaded at the execution time and behave as true plug-in components. for example for MFC, if there is a wa&y to write a dll that exports some classes dervived from mfc classes, that dll need be implicitly linked to the exe, and this latter wouldn't succeed even to load without her.
Is in COM, ATL a solution ?
So what i did was to create a simple dll, that can access mfc, then in the CWinApp object i declared a Cwnd object ( acontainer for the specific control) and to there i shifted an activex control data member: when the window is created, it creates the control in its area. i declared the eventsink map in the CWnd so to capture the events. and then you have simple plain exportable functions that enable the caller to create the internal CWnd object and calles its members. but since i need to pass a parent window (originating from the application interface classes) then the problem i talked about comes ( mfc pointer)
here's also what i tried :
a new MFC ActiveX project, thinking i can apply the containment principle :
an abstract, wrapper Control contains the specific one, relay the evnts in either senses, but it just didn't work, the specific activex control create function fails when the OnCreate container member function is called to load the global control"
Thank u in advance.
charfeddine_ahmed@yahoo.fr
|
|
|
|
|
|
What is IDispatch and
How it related to IUnknown?
thanks
|
|
|
|
|
IDispatch is an interface that is derived from IUnknown.
it contains some methods like GetIDsOfNames , Invoke etc...
This is mainly invented,, so that the clients that are unaware of the V-Table fundas can make use of COM server. ex: calling from javascript, vb etc.
The GetIDsofNames fn return the dispatch id of a method name, given it's name..
the Invoke method calls the actual method on the COM Server.
for more info refer MSDN.
- cheers
redCat
^-^
@|@
|
|
|
|
|
Really nice and useful for interviews
Please add to it when you get time. For e.g. what really happens behind the scenes when you call CoCreateInstance etc.
You get a 5 from me.
Cheers,
Mel
|
|
|
|
|
Hi,
There is a very nice article that answers ur questions..
Introduction to COM Part II - Behind the Scenes of a COM Server
By Michael Dunn
A tutorial for programmers new to COM that explains the internals of COM servers, and how to write your own interfaces in C++
http://www.codeproject.com/com/comintro2.asp
cheers
|
|
|
|
|
Hi,
I am trying to run some service on win2k3 which was running perfectly fine on win2k, but its giving me the following error code 80004015 on win2k3.
This service is trying to initialize the perf counters using
IRunningObjectTable->Register(ROTFLAGS_ALLOWANYCLIENT|ROTFLAGS_REGISTRATIONKEEPSALIVE ,this,Moniker,&RegisterKey).
This is failing to register the perf counters but service is working fine with the error code "80004015". This happens when we try to register a CLSID that has an APPID with RunAs account different from your server's identity.
when I do the following changes then its starts working, but I guess that is not the right approach,
1. Add the following value in registry ie appid{}/RunAs. i.e. RunAs = Interactive User.
2. Installing and run the service with administrator account but not as local service.
Can you please let me know if you know any other way i can do the things so that i can run the service as local system.
Thanks in advance,
Regards,
Jack
PS : plz CC your reply on jacksmith123ster@gmail.com
|
|
|
|
|
Hi,
How to extract COM information from a DLL ?
I'm trying to get this information to register COM objects;
Thank you
Rogerio
|
|
|
|
|
use VB ...!
add this dll to a dummy project using project references.
once this dll is added..
use the intellisense feature of VB to see all the methods and properties that are exposed..
dim obj as XXXX
Now obj. will list all info..
Simple..
|
|
|
|
|
Hi,
I just want to do this manually. Using Windows API. I'm using VC++
Thanks
|
|
|
|
|
If it has typelib in resources, use LoadTypeLib and then returned ITypeLib*. If it is not, there is no way.
|
|
|
|
|
Hi,
iam also looking for a good answer, and i implemented in the following way.
You can use CLSIDFromProgIDEx to get the info if you know the progID.
to get the progid you need to enumerate the registry for the given file.
it may be very basic.
regards
....
|
|
|
|
|
Whenever a COM dll is created, a type library is also created(by compiling the .idl file) which has all the info abt the interfaces which are used in COM(their ID,name,signature,methods,CLSID & co-class of the component,even the unique id of the type library).we have to import this type library using #import if we r developing CO client by ATL.Then by smart pointers we can create COM objects by using CreateInstance() fubction.Dont forget to use CoInitialize(NULL).
Never complain,never explain,just do your work.
|
|
|
|
|
|
dear friend,I have taken so much pain to collect these nice questions and share it with everybody ...
Atleast be a bit kind with ur words.. .
ciao
|
|
|
|
|
|
really bad stuff...
|
|
|
|
|