|
Hi All,
My requirements needs me to pass an instance of a class xyz in a third party component(OCX) to my dll in ATL COM. how do i go about this?
We all know that passing parameters in the constructors of the exposed atl classes/objects is literally impossible unless i write my own atl library(oops sorry bad joke!).
That means the only option i have is to pass this third party component
instance to a method, i hope this is possible, even if it is, how do i define
the 'xyz' data type in the idl file?
<br />
import "oaidl.idl";<br />
import "ocidl.idl"; <br />
[<br />
object,<br />
uuid(AB375A74-76CB-4BBC-BFED-141791262B38),<br />
dual,<br />
helpstring("IExposedATLClass Interface"),<br />
pointer_default(unique),<br />
oleautomation<br />
]<br />
interface IExposedATLClass : IDispatch<br />
{<br />
[id(1), helpstring("method GetInstance")] HRESULT GetInstance([in] Ixyz *instance);<br />
};<br />
<br />
[<br />
uuid(3C9EB277-EC91-4E42-8CD7-34F918490B69),<br />
version(1.0),<br />
helpstring("MYDLL 1.0 Type Library")<br />
]<br />
library MYDLLLib<br />
{<br />
importlib("stdole32.tlb");<br />
importlib("stdole2.tlb");<br />
importlib("thirdpartycomponent.tlb");<br />
<br />
<br />
[<br />
uuid(4DC3999A-797D-4F9A-8955-812E87E4B6D0),<br />
helpstring("ExposedATLClass Class")<br />
]<br />
coclass ExposedATLClass<br />
{<br />
[default] interface IExposedATLClass;<br />
};<br />
};<br />
the compiler doesnt recognize the xyz data type...
i import the component(OCX) in my stdafx.h file, my idl file imports the midl compiler generated .tlb file in my library namespace, after all this when i try importing the component's idl file in my idl
<br />
import "oaidl.idl";<br />
import "ocidl.idl"; <br />
import "thirdpartycomponent.idl";<br />
the compiler reports ambiguous symbols.
what should i do?
I'd really appreciate any kind of help/suggestion here.
nikhil
|
|
|
|
|
Hi All,
I am working on distributed application project in VC++. In my project, I am facing problem in debugging COM+ DLL (i.e ATL-COM DLL with MTS) project module. I want to debug one function inside this COM+ DLL. The function that I want to debug is called by windows service project module(i.e myproject.exe which is run as service on the same machine where COM+ DLL is registered.)
To debug this COM+ DLL, I compile both COM+ DLL project module and windows service module(i.e myproject.exe ) in debug mode with appropriate break points. In MS Visual C++ IDE, project setting option for COM+ DLL project module, under “executable for debug session” I added path for debug version of windows service EXE (i.e myproject.exe).
The Problem is, “when I trying to debug COM+ DLL module by pressing F5, it invokes the myproject.exe and stops at statement in windows service EXE (i.e myproject.exe) which is calling function inside the COM+ DLL that I want to debug. But when I press “Debugstep Into” or F11 to debug the COM+ DLL code, it is unable to link to COM+ DLL code and returns only return value from function inside COM+ DLL that I want to debug”
You can reach me on nimesh2611@rediffmail.com
Can any one tell me what other setting required under Project setting in VC++ IDE.
Or
Can you tell me some other approach to debug this COM+ DLL ?
Or
Send me some related links or document that helps me out…
Thanks
Nimesh patel.
Nimesh
|
|
|
|
|
NEED HELP WITH WORKING IMAPI OBJECTS
hi,
I want to work with IMAPI INTERFACES. I am
working in win xp with sp2 installed in Visual C++ 6.0 environment.
I wrote a sample code just to access IDiscmaster interface ptr.
The error comes in CoCreateInstance. I searched in my hard disk IMAPI.H i cannot find it. so
//CLSID CLSID_DISCMASTER;
//HRESULT hr = S_OK;
//hr = CoCreateInstance(CLSID_DISCMASTER, NULL, 1, IID_Unknown, (void**) ppUnk);
//or i tried this also
//hr = CoGetClassObject(CLSID_DISCMASTER,CLSCTX_INPROC_SERVER, NULL, IID_IClassFacory, (void**) &ppCf);
//Both are failing why
can u just help me regarding this.
thank you,
A beginner
|
|
|
|
|
You need the Feb 2003 Platform SDK, which was the last issue 'guaranteed' to work with VC6.
I believe you can download it from here[^]
Steve S
Developer for hire
|
|
|
|
|
Thank u steve,
I stepped my first step sucessfully in creating a instance of MSDiscMaster.
I got it and thanks for u that u guided me nicely. I have to Yet get that
sdk. Yesterday i tried to create an instance and when i patiently tried to
debug where i went i wrong and i found that i am creating a wrong instance
from the registry key.Thank u very much for patiently helping me in this.
Yours truly,
K.Pavan
|
|
|
|
|
Hi
My task is to puing to other systems using WMI can u suggest how to proceed on this task.
Thanks in advance
abhi
|
|
|
|
|
HI,
I'm a new member here and am glad to be one.I'm sure I'll find vast info here
as I start to venture into learning C#. I'm currently a axapta developer which happen to use X++ language (similar to C#).
regards,
pdchua
|
|
|
|
|
|
Hi,
I`m using a BHO to load my ExplorerBar (CATID = InfoBand) by default when Explorer loads. But on some machines, which seemingly have the same setup (all WindowsXP with SP2 installed and updated) it does not load - it does not instantiate my object (the Constructor is never called) and ofcourse i receive no IObjectWithSite->SetSite call.
anyone have any ideas why this is happening? any experience with this sort of problem or suggestions on how to solve it?
Thanks in advance.
|
|
|
|
|
hi all,
I have an activex control( a video player), which i embed in IE using <object> and its class id.
So whenever IE(page) opens,an information bar comes at the top of the window.we have to Right Click>>Allow Blocked content.Then player starts playing cam files.
I need to change options of the information bar.Instead of Allow Blocked Content option ,i need to place PLAYER's name.
is it possible?
Also after Allow Blocked content option is selected,Window prompts for whether to install the Activex control.Can i do it programatically ?..anyways..
Give me some suggestions.
Thanks in Advance,
Sunita
|
|
|
|
|
The 'allow blocked content' prompt is probably coming from the Local Machine Lockdown feature in XP SP2. In Internet Options, go to the Advanced tab, scroll down to Security, and check 'Allow active content to run in files on My Computer'. If the prompt goes away, your users will not see this if accessing the page from another machine (whether over the Internet or a company intranet).
You cannot automatically install the ActiveX control. This is quite deliberate - to allow this would be a serious security hole. If you're using this on an intranet site, you could use a standalone installer to install your control using whatever management tools you have available.
Note that users not running as administrators will not be prompted to install the ActiveX control.
Stability. What an interesting concept. -- Chris Maunder
|
|
|
|
|
Please suggest a online tutorial for COM/DCOM.
KIRAN PINJARLA
|
|
|
|
|
Have you already read through this[^] and the other articles on CP?
Steve S
Developer for hire
|
|
|
|
|
Thank u steve.
KIRAN PINJARLA
|
|
|
|
|
i have access detail for ODLserver current API program as follow To access api:
user,acount,password,and the port no.I have registered thr activex.ocx
Now i want to make connection with server.
I have created a vc6 dialog based application which include activex control in that...now i am able to add active x in my dialog box...
My confusion is how to write a code which make connection with ODL server
void servertryDlg :: onloginArielapictrl1(LPCTSTR SessionId,short Accepted,LP CTSTR FailureMessafe)
{
//code
}
and
void servertryDlg :: onconnectedtoserverarielapictrl1(LPCTSTR SessionId)
{
//code
}
After getting connected to server get a session id.....
Ant kind of help will b helpful to me.....thanks
|
|
|
|
|
I need a little explaination about the MIDL compiler usage. I want to compile the IDL file that I extracted using the method described in this article:
Use regular expression in your C++ program
The article's author doesn't explain how to compile the file into the typelib and header(s).
Thanks.
Mark
|
|
|
|
|
First, find your MIDL. It's location will vary based on what VC you have installed and where, of course.
Make sure it's in your PATH. VC6 came with VCVARS32.BAT for just this thing, VS2005 has a command prompt option it installs which does pretty much the same thing.
At that point,
MIDL yourfile.idl
should then produce yourfile.tlb, and possibly other files.
Steve S
Developer for hire
|
|
|
|
|
Thanks for the tip Steve. Actually, someone pointed out that I should simply "Add to Project" the idl file and that would automatically invoke the midl compiler. Worked like a charm.
I forgot about the VCVARS32.bat file too!
"Complexity breeds problems. Keep it simple." - Mark
|
|
|
|
|
How do I build a MFC executable that can also register as an ActiveX object? Or how do I make an Activex object an executable (instead of ocx or dll)?
I think the 1st method probably have to implement all the register and unregisters function, so I would guess 2nd method is easier.
Any information will be appreciated!
|
|
|
|
|
Generally you only use local servers (out-of-process COM objects) when the COM objects form an automation model for a different application, or for OLE linking/embedding. You might also do it if you need a separate process space, basically if you need a different security token, a huge amount of virtual memory or you're not confident in the reliability of the code. For almost all other situations you would want your COM objects to run in-process for performance.
For a local server, you must provide a marshaller. This means either sticking to Automation types and using the Automation marshaller (generating and registering a type library), generating a proxy/stub DLL, or doing it yourself. There are many scenarios in-process where you also need a marshaller, but for the simple client-calls-object-on-same-thread case (and the thread and object have compatible apartment settings) you don't.
Microsoft recommended practice these days is to use Windows Installer to install your program, and to use the Class table to register your classes, avoiding self-registration. This is so Windows Installer can detect changes to and repair the registration information if it gets overwritten.
When trying to create an instance of your class, COM can call into an in-process server to create a class factory object (DllGetClassObject). COM has no way to call into your out-of-process server directly, so you must tell it which class objects you have using CoRegisterClassObject . The MFC equivalent is to call COleObject::RegisterAll , which registers all class objects that you've declared using DECLARE_OLECREATE .
Stability. What an interesting concept. -- Chris Maunder
|
|
|
|
|
Hello all,
I have an activex control,which is a video player plays .cam files.I run this activex control using IE by giving its class id in <object> tag.
So whenever the IE page is opened,the activex control will be downloaded and player starts playing cam files.All camfiles uses same version of player unless until new version is updated.
Everything is working good.
The problem is, if i open two windows(IE) at a time,one player is crashing and showing error.how to overcome this problem..
1.Can i play two .cam files at a time?
2.do i need to change any code in Activex control
Plz help me..give me some suggestions..
Thanks in advance
Sunita
|
|
|
|
|
You probably have some kind of concurrency issue. You should learn about threading in COM, the apartment models, and how to handle these.
Internet Explorer uses one thread per frame, which are Single Threaded Apartment [STA] threads. You may not experience the same problem if you launch another instance of Internet Explorer from the Start menu, Quick Launch, or a shortcut, since these actions create a new IEXPLORE.EXE process.
What exactly is the displayed error message?
Stability. What an interesting concept. -- Chris Maunder
|
|
|
|
|
I don't think the reason is from COM apartment models, ActiveX controls r working in their own apratment witch initilized by IE . what is the error message?
life is like a box of chocolate,you never know what you r going to get.
|
|
|
|
|
thanks for ur reply
while opening two players in two IE,one player is crashing and showing error.i got error in add-ons.
The error description is like this..
"The following addons was running when the problem was occured.and it showed details of the player dll"
Any solution for this..
i posted the same question in vc++ forum and got suggetions.they said the probelm might be due to sound resources in player.since both the player using same sound resources ,one is crashing..
I tested it by removing sound resources from Activex control(player) and ran it..but that time also i got the crashing problem.
plz help me and give some suggestions.
Thanks in advance
Sunita
|
|
|
|
|
Hi,
I`ve developed an explorer bar using ATL/WTL and i would like to add 2 features to it :
1. Assign it an accelerator, the default bars (favorites / history etc...) have them, and i`m wondering if it is possible to do the same here?
2. Have the bar display as the default view instead of the info pane that is default now.
I know someone who did this for a bar he developed using .NET - he just put all his reg. keys (from his CLSID) under the Folders View CLSID (which is {EFA24E64-B078-11d0-89E4-00C04FC9E26E}).
I tried doing the same with my bar, but i only get a grey pane and my object is not even called for/instantiated. is there something i am not implementing?
I thank in advance anyone trying to help.
(btw - you can check the app out at http://www.tomseffect.com if you`d like)
|
|
|
|