|
hi
I want to embed the Windows Media Player to my C# win app
I did it successfully.
and I know that for changing it's skin, have to use of 'IWMPRemoteMediaServices.GetCustomUIMode' method.
but I can not find this method at all.
I do not know how can select a desired skin for my WMP object in my application.
anybody help me ?!
H.R
|
|
|
|
|
Hello,
I wrote a simple Broser Helper Object as an ATL COM component which works just fine when running it from Visual Studio or registering it with regsvr32. Also I created a setup project for deployment of the BHO.
What I would like to know is what I need to do in my setup project so the DLL file is registered correctly and becomes executed when the Internet Explorer starts.
Does someone know which steps I must process exactly?
Thanks!!
Constantin
|
|
|
|
|
|
Hello Sohail,
it helped a little bit:
A BHO is a COM server and should be registered both as a COM server and as a BHO.
But how do I do this in with my setup project. I guess the second step is done by registering the COM as an BHO:
HKLM {
SOFTWARE {
Microsoft {
Windows {
CurrentVersion {
Explorer {
'Browser Helper Objects' {
ForceRemove {1E1B2879-88FF-11D2-8D96-D7ACAC95951F}
}}}}}}}
This code snippet is also from the link you provided, but shouldn't I change ForceRemove {...} to NoRemove {...} , because I want the key to be persistent after running the setup...
And how do I do the first step - registering my COM server - in the setup project?
Thanks in advance!
Constantin
|
|
|
|
|
conman110 wrote: HKLM { SOFTWARE { Microsoft { Windows { CurrentVersion { Explorer { 'Browser Helper Objects' { ForceRemove {1E1B2879-88FF-11D2-8D96-D7ACAC95951F} }}}}}}}
is code for RGS file if you are developing your component using ATL.
conman110 wrote: but shouldn't I change ForceRemove {...} to NoRemove {...}, because I want the key to be persistent after running the setup
ForceRemove clause that causes the key to be removed when you unregister the object.
Sohail
modified 21-Apr-21 21:01pm.
|
|
|
|
|
Ok, but my question actually is, how I should adjust my setup project so the COM object is registered on the target machine (what steps have to be done in the registry) and what has to be done to register this COM object as an BHO (also which steps are required in the registry, but I guess it's the key you were refering to in your link)?
You see, it seems the COM object gets automatically registered by Visual Studio when building the project and this has to be done by the setup project when installing the BHO on another machine also.
Constantin
|
|
|
|
|
conman110 wrote: what steps have to be done in the registry) and what has to be done to register this COM object as an BHO (also which steps are required in the registry, but I guess it's the key you were refering to in your link)?
Since its a COM server, you have to register it in a way all other COM server are registered. Now this is a special server/component that is also a BHO, so for Explorer to recognize it as BHO some special registry key is required in the Registry. This special registry entry is to be made under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects
as shown in the link I gave you.
conman110 wrote: You see, it seems the COM object gets automatically registered by Visual Studio when building the project and this has to be done by the setup project when installing the BHO on another machine also.
Are you using ATL for building your COM server? If yes then there is a .RGS file in ATL projects that contains details of registration. ATL Registrar object takes care of registration. See DllRegisterServer and DllUnregisterServer function code in your ATL project. The code is autogenerated by wizard.
If you want to manually register COM DLL servers, we can use a Windows utility - regsvr32.exe
In the MSI package, if you open it in Orca tool for editing, you will find a table called SelfReg[^]. Any self registering component can have an entry in this table which results in auto-registration during intallation.
If you are using any other tool for creating the Installation setup then consult how it handle SelfRegistration of components.
Does following link help -
http://support.microsoft.com/?id=307367[^]
Sohail
modified 21-Apr-21 21:01pm.
|
|
|
|
|
Thank you Sohail,
you gave me the information I needed!
Best regards!
Constantin
|
|
|
|
|
Glad I could help
Sohail
modified 21-Apr-21 21:01pm.
|
|
|
|
|
When i executed VC++6.0 project(MFC and ATL application) i encountered an error message "COM Error: 0x80040154" .
Q. What the error means and how it can be solved?
|
|
|
|
|
Catharin wrote: COM Error: 0x80040154
Corresponds to REGDB_E_CLASSNOTREG.
Quoting from MSDN,
REGDB_E_CLASSNOTREG
A specified class is not registered in the registration database. Also can indicate that the type of server you requested in the CLSCTX enumeration is not registered or the values for the server types in the registry are corrupt.
Sohail
modified 21-Apr-21 21:01pm.
|
|
|
|
|
What all steps are needed for solving the above scenario?
|
|
|
|
|
Catharin,
Check if the COM server is registered on your machine. If it's not, then register it.
Also you will need to explain a bit more about what code fails.
Sohail
modified 21-Apr-21 21:01pm.
|
|
|
|
|
Catharin,
Is the problem resolved?
Sohail
modified 21-Apr-21 21:01pm.
|
|
|
|
|
Sohail,
Not yet solved.
Let me explain the current situation. I created a sample C# class library project. The code is listed below:
COMServer:
using System;
using System.Runtime.InteropServices;
namespace MyComServer
{
public delegate void MyComEventHandler();
// Step 1: Defines an event sink interface to be implemented by the COM sink.
<Guid({16FA6CC7-E2B9-4326-9D4F-ADBAADA6627D})]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
public interface IMyComEvents
{ [DispId(1)]
void myComEvent();
}
// Step 2: Connects the event sink interface to a class by passing the namespace and event sink interface
[ComSourceInterfaces(typeof(MyComServer.IMyComEvents))]
public class MyComCls
{
public event MyComEventHandler myComEvent;
public MyComCls()
{}
public void raiseMyComEvent()
{
this.myComEvent();
}
}
}
Then the DLL file named MyComServer is registered using the following command
regasm MyComServer.dll /tlb:MyComServer.tlb
then after giving a Strong Name [sn -k MyComServer.snk]
the DLL file is registered into the global assembly using the command
gacutil -i MyComServer.dll
COMClient:
For the client application I used VC++ 6 MFC wizard[exe] and a simple dialog object.
I imported the MyComServer.tlb into stdafx.h file and all supporting header files.
Also done event sinking. After all those process i executed the MFC application. Then i encountered COM Error: 0x80040154 Class Not Registered.
Also is there any other option to invoke the events written in the class library?
Cathrin
|
|
|
|
|
Are you missing [ComVisible(true)] attribute for your COM coclass?
-- modified at 7:16 Monday 22nd October, 2007
What is your VC++ client code for creating the object?
Sohail
modified 21-Apr-21 21:01pm.
|
|
|
|
|
Yes, [ComVisible(true)] attribute in .NET Class Library (AssemblyInfo.cs).
|
|
|
|
|
Catharin wrote: Yes, [ComVisible(true)] attribute in .NET Class Library (AssemblyInfo.cs)
So COMVisible(true) is present for the coclass you are instantiating from your VC++ client?
Can you tell me which part of your code fails with the HRESULT value you mentioned?
Sohail
modified 21-Apr-21 21:01pm.
|
|
|
|
|
I am writing a plug-in which have a function call WORD and then get text from WORD. So, I must get Close event of WORD so that I could get the text from WORD. I created a CWordSinkEvent class to get the event. When WORD is closed, function OnWordClose() is called. But I was not allowed to call this function from my plug-in because this function is : afx_msg void OnWordClose(). I want my plug-in wait until it receive the Close event of WORD and get the text from WORD. Please help me with any solution as well. Thank you so much.
|
|
|
|
|
Hi!
I've this problem.I've to do a in process COM server in C++;the server has to send in real time as fast as possible a vector of six elements produced by a stand alone application (written in C++) to a MATLAB client. MATLAB client can't read the new value of vector untill the application does not write new one.
Can you suggest me a possible solution?
Thanks.
DanyCode
|
|
|
|
|
How to call events written in C#.NET within VC++ 6.0?
please post a reply as soon as possible.
|
|
|
|
|
|
Thank you for a fast response
|
|
|
|
|
Hello all...
I have looked high and low online for an answer and nothing comes up.
I am using the Windows Media Player control in my app (language: C++ via MFC 4.2). What i need is to get access to the IWMPVideoCtrl interface so i can have the ablilty to alter the "stretchToFit" and "maintainAspectRatio" properties. Is there a trick to doing this? I do have a reference to the IWMPPlayer interface, but, there is no method where i can pass in and get a reference to the IWMPVideoCtrl interface.
Any ideas?
Thanks...
-andy.
|
|
|
|
|
After a bit of searching, i found the interface which supports setting "stretchToFit"... This property also forces "maintainAspectRatio", so this is the answer. I am posting this here incase anyone else runs into this problem.
http://msdn2.microsoft.com/en-us/library/bb249119.aspx[^]
When you have an IWMPPlayer interface created, you can call IWMPPlayer::QueryInterface() on an IWMPPlayer2 interface. This will add in the "stretchToFit" properties laying within the IWMPPlayer2 interface.
-andy.
|
|
|
|