473,796 Members | 2,703 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

C# and OLEFormat.Objec t?

I have a C# add in that inserts a custom active x control
into a worksheet.

Once the object is inserted i can locate the object
through both Shapes and Worksheet.OLEOb jects. What I
can't do is figure out how to use the object
programatically .

I added a reference to the object in the Visual Studio
project by importing the object OCX. The reference shows
up as Interop.ActiveX Lib and my objects methods and
properties are shown in the object browser under both
interop.ActiveX Lib.ImyControl and
interop.ActiveX Lib.myControlCt lClass.

I have tried various arrangements of casting the object
returned from both Shapes and Worksheet's OLEFormat.Objec t
trying to get something that I can use directly with no
success:

ActiveXLib.myCo ntrolCtlClass mc =
(ActiveXLib.myC ontrolCtlClass) shape.OLEFormat .Object;

I am writting the add in Visual Studio .Net and it is
running in Excel 2002 Service Pack 1.

What I want to do is to be able to use:
mc.myControlMet hod(doIT).

Thanks for the help

Mark
Nov 15 '05 #1
12 6090

Hi Mark,

Thanks for posting in this group.
What is the error message when you convert shape.OLEFormat .Object to
ActiveXLib.myCo ntrolCtlClass?
I think may be you can use the typeof operator to determine the type of
shape.OLEFormat .Object.
Maybe you can try to use ActiveXLib.ImyC ontrol to get this interface.
Do you make sure that this object is a ActiveXLib.myCo ntrolCtlClass type?

Best regards,
Jeffrey Tan
Microsoft Online Partner Support
Get Secure! - www.microsoft.com/security
This posting is provided "as is" with no warranties and confers no rights.

--------------------
| Content-Class: urn:content-classes:message
| From: "Mark" <mh*@yadayada.c om>
| Sender: "Mark" <mh*@yadayada.c om>
| Subject: C# and OLEFormat.Objec t?
| Date: Fri, 24 Oct 2003 08:53:01 -0700
| Lines: 32
| Message-ID: <0c************ *************** *@phx.gbl>
| MIME-Version: 1.0
| Content-Type: text/plain;
| charset="iso-8859-1"
| Content-Transfer-Encoding: 7bit
| X-Newsreader: Microsoft CDO for Windows 2000
| Thread-Index: AcOaRudJlQHTzFP ER3avOahP1Ww40A ==
| X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4910.0300
| Newsgroups: microsoft.publi c.dotnet.langua ges.csharp
| Path: cpmsftngxa06.ph x.gbl
| Xref: cpmsftngxa06.ph x.gbl microsoft.publi c.dotnet.langua ges.csharp:1938 41
| NNTP-Posting-Host: TK2MSFTNGXA12 10.40.1.164
| X-Tomcat-NG: microsoft.publi c.dotnet.langua ges.csharp
|
| I have a C# add in that inserts a custom active x control
| into a worksheet.
|
| Once the object is inserted i can locate the object
| through both Shapes and Worksheet.OLEOb jects. What I
| can't do is figure out how to use the object
| programatically .
|
| I added a reference to the object in the Visual Studio
| project by importing the object OCX. The reference shows
| up as Interop.ActiveX Lib and my objects methods and
| properties are shown in the object browser under both
| interop.ActiveX Lib.ImyControl and
| interop.ActiveX Lib.myControlCt lClass.
|
| I have tried various arrangements of casting the object
| returned from both Shapes and Worksheet's OLEFormat.Objec t
| trying to get something that I can use directly with no
| success:
|
| ActiveXLib.myCo ntrolCtlClass mc =
| (ActiveXLib.myC ontrolCtlClass) shape.OLEFormat .Object;
|
| I am writting the add in Visual Studio .Net and it is
| running in Excel 2002 Service Pack 1.
|
| What I want to do is to be able to use:
| mc.myControlMet hod(doIT).
|
| Thanks for the help
|
| Mark
|

Nov 15 '05 #2
Hi Jeffrey,

The error message i get is "Specified Cast is not valid".
The type of shape.OLEFormat .Object.GetType ().FullName;
is System.__ComObj ect.

I don't know how to dereference System.__ComObj ect to get
its actual type. (If I did then I might know how to get
to the object that I want to use).
If possible can you please post an example of how this
cast should made in order to work with the actual object?

Thanks

Mark
-----Original Message-----

Hi Mark,

Thanks for posting in this group.
What is the error message when you convert shape.OLEFormat .Object toActiveXLib.myC ontrolCtlClass?
I think may be you can use the typeof operator to determine the type ofshape.OLEForma t.Object.
Maybe you can try to use ActiveXLib.ImyC ontrol to get this interface.Do you make sure that this object is a ActiveXLib.myCo ntrolCtlClass type?
Best regards,
Jeffrey Tan
Microsoft Online Partner Support
Get Secure! - www.microsoft.com/security
This posting is provided "as is" with no warranties and confers no rights.
--------------------
| Content-Class: urn:content-classes:message
| From: "Mark" <mh*@yadayada.c om>
| Sender: "Mark" <mh*@yadayada.c om>
| Subject: C# and OLEFormat.Objec t?
| Date: Fri, 24 Oct 2003 08:53:01 -0700
| Lines: 32
| Message-ID: <0c************ *************** *@phx.gbl>
| MIME-Version: 1.0
| Content-Type: text/plain;
| charset="iso-8859-1"
| Content-Transfer-Encoding: 7bit
| X-Newsreader: Microsoft CDO for Windows 2000
| Thread-Index: AcOaRudJlQHTzFP ER3avOahP1Ww40A ==
| X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4910.0300
| Newsgroups: microsoft.publi c.dotnet.langua ges.csharp
| Path: cpmsftngxa06.ph x.gbl
| Xref: cpmsftngxa06.ph x.gbl microsoft.publi c.dotnet.langua ges.csharp:1938 41| NNTP-Posting-Host: TK2MSFTNGXA12 10.40.1.164
| X-Tomcat-NG: microsoft.publi c.dotnet.langua ges.csharp
|
| I have a C# add in that inserts a custom active x control| into a worksheet.
|
| Once the object is inserted i can locate the object
| through both Shapes and Worksheet.OLEOb jects. What I
| can't do is figure out how to use the object
| programatically .
|
| I added a reference to the object in the Visual Studio
| project by importing the object OCX. The reference shows| up as Interop.ActiveX Lib and my objects methods and
| properties are shown in the object browser under both
| interop.ActiveX Lib.ImyControl and
| interop.ActiveX Lib.myControlCt lClass.
|
| I have tried various arrangements of casting the object
| returned from both Shapes and Worksheet's OLEFormat.Objec t| trying to get something that I can use directly with no
| success:
|
| ActiveXLib.myCo ntrolCtlClass mc =
| (ActiveXLib.myC ontrolCtlClass) shape.OLEFormat .Object;|
| I am writting the add in Visual Studio .Net and it is
| running in Excel 2002 Service Pack 1.
|
| What I want to do is to be able to use:
| mc.myControlMet hod(doIT).
|
| Thanks for the help
|
| Mark
|

.

Nov 15 '05 #3
Hi Mark,

So far as I know, the cast you used will not work for you because .Net can't retrieve the type information from Interop when you use cast in code
directly. There is no any metadata for the interoped com control so that .Net don't know how to cast this object for you. From my experience, I'd
suggest you can use .Net reflection method to dynamically obtain the type information during runtime and then call the method you want.

Assume there is one user control (ProgID is "Project1.UserC ontrol1") which has one public method Test. Test method only pop-up one window with
"hello world". After the registration to the system, you can use the codes below to execute it.

[C#]
Type t = Type.GetTypeFro mProgID("Projec t1.UserControl1 ");
Object o = Activator.Creat eInstance(t);
t.InvokeMember( "Test", BindingFlags.In vokeMethod, null, o, null);

[VB.net]
Dim t As Type = Type.GetTypeFro mProgID("Projec t1.UserControl1 ")
Dim o As Object = Activator.Creat eInstance(t)
o.Test()

In C#, you have to use InvokeMember to execute the Test method. But in VB.net, you can use the o.Test syntax to use the method.

Please note in VB.net, if you type "o.", the IntelliSense window will not tell you there is one Test method for the object because the Test method
information is retrieved from Project1.UserCo ntrol1 control at runtime. At coding-time, there is no enough type information making IntelliSense to
find the Test Method.

Furthermore, for your scenario, the control object may have been loaded to the same process with excel worksheet so that you may modify the
Activator.Creat eInstance to Activator.GetOb ject.

Please feel free to let me know if you have any questions.

Does this answer your question? Thank you for using Microsoft NewsGroup!

Wei-Dong Xu
Microsoft Product Support Services
Get Secure! - www.microsoft.com/security
This posting is provided "AS IS" with no warranties, and confers no rights.
Nov 15 '05 #4
Hi Wei-Dong Xu,

Thank you for your help. We are soooo close. Your
suggestions allow me to get a little farther.

I am confused by the Activator.GetOb ject call. The second
parameter is a URL. Since the control that I want to talk
to is in the same instance of Excel as the add in I don't
know what to use for this argument.

// Programatically add the object to the spreadsheet
Microsoft.Offic e.Interop.Excel .Shape shape =
ws.Shapes.AddOL EObject(
"MyDomain.MyCtl .1",
Type.Missing,
false,
false,
Type.Missing,
Type.Missing,
Type.Missing,
1, 1, 300, 300);

// Create argument to pass to control's method.
object [] args = {(object) "SomeArgument"} ;

// Get type of control
Type abCtl1Type = Type.GetTypeFro mProgID(
"MyDomain.MyCtl .1");

// What do I use for the second argument if the instance
of abCtl1Type is the instance I automatically inserted
into the spreadsheet with the AddOLEObject call above?

ActiveXLib.MyCt lClass abCtl1Obj =
(ActiveXLib.MyC tlClass) Activator.GetOb ject
(abCtl1Type, ?????);

abCtl1Type.Invo keMember("OpenA pplication",
BindingFlags.In vokeMethod, null, abCtl1Obj, args);

Thanks

Mark
-----Original Message-----
Hi Mark,

So far as I know, the cast you used will not work for you because .Net can't retrieve the type information from
Interop when you use cast in codedirectly. There is no any metadata for the interoped com control so that .Net don't know how to cast this object
for you. From my experience, I'dsuggest you can use .Net reflection method to dynamically obtain the type information during runtime and then call
the method you want.
Assume there is one user control (ProgID is "Project1.UserC ontrol1") which has one public method
Test. Test method only pop-up one window with"hello world". After the registration to the system, you can use the codes below to execute it.
[C#]
Type t = Type.GetTypeFro mProgID("Projec t1.UserControl1 ");
Object o = Activator.Creat eInstance(t);
t.InvokeMember ("Test", BindingFlags.In vokeMethod, null, o, null);
[VB.net]
Dim t As Type = Type.GetTypeFro mProgID ("Project1.User Control1")Dim o As Object = Activator.Creat eInstance(t)
o.Test()

In C#, you have to use InvokeMember to execute the Test method. But in VB.net, you can use the o.Test syntax to
use the method.
Please note in VB.net, if you type "o.", the IntelliSense window will not tell you there is one Test method for the
object because the Test methodinformation is retrieved from Project1.UserCo ntrol1 control at runtime. At coding-time, there is no enough
type information making IntelliSense tofind the Test Method.

Furthermore, for your scenario, the control object may have been loaded to the same process with excel worksheet
so that you may modify theActivator.Crea teInstance to Activator.GetOb ject.

Please feel free to let me know if you have any questions.

Does this answer your question? Thank you for using Microsoft NewsGroup!
Wei-Dong Xu
Microsoft Product Support Services
Get Secure! - www.microsoft.com/security
This posting is provided "AS IS" with no warranties, and confers no rights.

.

Nov 15 '05 #5
Hi Mark,

Thank you for replying and the codes!

From my understanding to your issue now, I'd suggest you can use Activator.Creat eInstance in this scenario. It will be appreciated you tell the
result.

Please feel free to let me know if you have any further questions.

Does this answer your question? Thank you for using Microsoft NewsGroup!

Wei-Dong Xu
Microsoft Product Support Services
Get Secure! - www.microsoft.com/security
This posting is provided "AS IS" with no warranties, and confers no rights.
Nov 15 '05 #6
Hi Wei-Dong Xu

I have tried multiple calls to CreateObject and none
appear to let me access the current instance of the
object. I don't get an exception so i am assuming that i
am creating a new object in all cases.

Here is sample code of what i am doing.

// Programatically add the object to the spreadsheet
Microsoft.Offic e.Interop.Excel .Shape shape =
ws.Shapes.AddOL EObject(
"MyDomain.MyCtl .1",
Type.Missing,
false,
false,
Type.Missing,
Type.Missing,
Type.Missing,
1, 1, 300, 300);
// Get type of control
Type abCtl1Type = Type.GetTypeFro mProgID(
"MyDomain.MyCtl .1");

// I'm not sure what the first agument should point to;
// the ActiveXLib, or something having to do with Excel.
// ActiveXLib works in this call.
// Microsoft.Offic e.Interop.Excel does not work here
ObjectHandle obj = (ObjectHandle) Activator.Creat eInstance(
"Interop.Active XLib",
abCtl1Type.Full Name);

ActiveXLib.MyCt lClass abCtl1Obj =
(ActiveXLib.MyC tlClass) obj.Unwrap();

abCtl1Obj.Metho dToDisplaySomet hingInControl(" String to
display");

No exception is thrown and nothing is displayed in the
visible control. Since I don't get an exception I assume
a new hidden control has been instantiated. PLEASE PLEASE
PLEASE PROVIDE A TESTED EXAMPLE OF HOW TO CALL THE
EXISTING OBJECT.

Thanks

Mark

-----Original Message-----
Hi Mark,

Thank you for replying and the codes!

From my understanding to your issue now, I'd suggest you can use Activator.Creat eInstance in this scenario. It will
be appreciated you tell theresult.

Please feel free to let me know if you have any further questions.
Does this answer your question? Thank you for using Microsoft NewsGroup!
Wei-Dong Xu
Microsoft Product Support Services
Get Secure! - www.microsoft.com/security
This posting is provided "AS IS" with no warranties, and confers no rights.

.

Nov 15 '05 #7
Hello Mark,

In addition to the advice given by Wei-Dong Xu and Jeffrey Tan, you should
be aware that .NET controls are not dependable on anything other than
WebForms, WindowsForms, and IE. The Microsoft Knowledge Base article

311334 INFO: ActiveX Control Containers That Support .NET Controls
http://support.microsoft.com/?id=311334

discusses this behavior and limitation.

This limitation may be superceded in the future.

--------------------
X-Tomcat-ID: 335647672
References: <0c************ *************** *@phx.gbl> <Vr************ **@cpmsftngxa06 .phx.gbl>
<00************ *************** *@phx.gbl>
<Ct************ **@cpmsftngxa06 .phx.gbl>
<06************ *************** *@phx.gbl>MIME-Version: 1.0
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
From: v-****@online.mic rosoft.com (Wei-Dong Xu [MSFT])
Organization : Microsoft
Date: Tue, 28 Oct 2003 10:29:02 GMT
Subject: RE: C# and OLEFormat.Objec t?
X-Tomcat-NG: microsoft.publi c.dotnet.langua ges.csharp
Message-ID: <On************ **@cpmsftngxa06 .phx.gbl>
Newsgroups: microsoft.publi c.dotnet.langua ges.csharp
Lines: 14
Path: cpmsftngxa06.ph x.gbl
Xref: cpmsftngxa06.ph x.gbl microsoft.publi c.dotnet.langua ges.csharp:1946 40
NNTP-Posting-Host: TOMCATIMPORT1 10.201.218.122

Hi Mark,

Thank you for replying and the codes!

From my understanding to your issue now, I'd suggest you can use Activator.Creat eInstance in this scenario. It will be appreciated you tell
theresult.

Please feel free to let me know if you have any further questions.

Does this answer your question? Thank you for using Microsoft NewsGroup!

Wei-Dong Xu
Microsoft Product Support Services
Get Secure! - www.microsoft.com/security
This posting is provided "AS IS" with no warranties, and confers no rights.


Regards,
Chris Jensen[MSFT]

This posting is provided “AS IS” with no warranties, and confers no rights.

Are you secure? For information about the Microsoft Strategic Technology
Protection Program and to order your FREE Security Tool Kit, please visit
<http://www.microsoft.c om/security>.
Nov 15 '05 #8
Hi Chris,

The ActiveX control is C++ not a .Net. The add in that is
trying to talk to it is written in C#. I did not think
this was a problem. Please let me know if I am mistaken?

Thanks

Mark
-----Original Message-----
Hello Mark,

In addition to the advice given by Wei-Dong Xu and Jeffrey Tan, you shouldbe aware that .NET controls are not dependable on anything other thanWebForms, WindowsForms, and IE. The Microsoft Knowledge Base article
311334 INFO: ActiveX Control Containers That Support .NET Controlshttp://support.microsoft.com/?id=311334

discusses this behavior and limitation.

This limitation may be superceded in the future.

--------------------
X-Tomcat-ID: 335647672
References: <0c************ *************** *@phx.gbl><Vr*********** ***@cpmsftngxa0 6.phx.gbl>
<00*********** *************** **@phx.gbl>
<Ct*********** ***@cpmsftngxa0 6.phx.gbl>
<06*********** *************** **@phx.gbl>
MIME-Version: 1.0
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
From: v-****@online.mic rosoft.com (Wei-Dong Xu [MSFT])
Organizatio n: Microsoft
Date: Tue, 28 Oct 2003 10:29:02 GMT
Subject: RE: C# and OLEFormat.Objec t?
X-Tomcat-NG: microsoft.publi c.dotnet.langua ges.csharp
Message-ID: <On************ **@cpmsftngxa06 .phx.gbl>
Newsgroups: microsoft.publi c.dotnet.langua ges.csharp
Lines: 14
Path: cpmsftngxa06.ph x.gbl
Xref: cpmsftngxa06.ph x.gbl microsoft.publi c.dotnet.langua ges.csharp:1946 40NNTP-Posting-Host: TOMCATIMPORT1 10.201.218.122

Hi Mark,

Thank you for replying and the codes!

From my understanding to your issue now, I'd suggest you can useActivator.Crea teInstance in this scenario. It will be appreciated you tellthe
result.

Please feel free to let me know if you have any further
questions.
Does this answer your question? Thank you for using Microsoft NewsGroup!
Wei-Dong Xu
Microsoft Product Support Services
Get Secure! - www.microsoft.com/security
This posting is provided "AS IS" with no warranties, and confers no rights.


Regards,
Chris Jensen[MSFT]

This posting is provided "AS IS" with no warranties, and

confers no rights.
Are you secure? For information about the Microsoft Strategic TechnologyProtection Program and to order your FREE Security Tool Kit, please visit<http://www.microsoft.c om/security>.
.

Nov 15 '05 #9
Hi Mark,

Thank you for replying!

I'd suggest that you can build one marco for your inserted ActiveX control, then you can all the macro in your add-in. In this way, you don't need to
retrieve the object type information of the inserted ActiveX control.

Please feel free to let me know if you have any further questions.

Does this answer your question? Thank you for using Microsoft NewsGroup!

Wei-Dong Xu
Microsoft Product Support Services
Get Secure! - www.microsoft.com/security
This posting is provided "AS IS" with no warranties, and confers no rights.
Nov 15 '05 #10

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

1
3229
by: Bijay Kumar | last post by:
Hi Guys, I was going through the source code of Object.cs in rotor. What I found is Equals() implemented as follows: public extern virtual bool Equals(Object obj); What I don't understand is:
0
4632
by: Bijay Kumar | last post by:
Hi Guys, I was going through the source code of Object class (Object.cs in rotor). What I found is Equals() implemented as follows: public extern virtual bool Equals(Object obj); What I don't understand is:
5
2268
by: Matthew | last post by:
I have a nice little Sub that saves data in a class "mySettings" to an XML file. I call it like so: Dim mySettings As mySettings = New mySettings mySettings.value1 = "someText" mySettings.value2 = "otherText" xmlSave("C:\folder\file.xml", mySettings) Here is the sub: Public Shared Sub xmlSave(ByVal path As String, ByVal config As
11
3846
by: Kevin Prichard | last post by:
Hi all, I've recently been following the object-oriented techiques discussed here and have been testing them for use in a web application. There is problem that I'd like to discuss with you experts. I would like to produce Javascript classes that can be "subclassed" with certain behaviors defined at subclass time. There are plenty of ways to do this through prototyping and other techniques, but these behaviors need to be static and...
5
2521
by: Michael Moreno | last post by:
Hello, In a class I have this code: public object Obj; If Obj is a COM object I would like to call in the Dispose() method the following code: System.Runtime.InteropServices.Marshal.ReleaseComObject(Obj);
26
5694
by: yb | last post by:
Hi, Is there a standard for the global 'window' object in browsers? For example, it supports methods such as setInterval and clearInterval, and several others. I know that w3c standardized several parts of the DOM, but this does not include the window object. Thank you
3
2775
by: User1014 | last post by:
A global variable is really just a property of the "Global Object", so what does that make a function defined in the global context? A method of the Global Object? http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Defining_Functions doesn't actually give any insight.
2
2659
by: Ralph | last post by:
Hi I don't understand why it's not working: function schedule(imTop){ this.tdImagesTop = imTop; } schedule.prototype.selectEl = function() { alert(this.tdImagesTop);
275
12417
by: Astley Le Jasper | last post by:
Sorry for the numpty question ... How do you find the reference name of an object? So if i have this bob = modulename.objectname() how do i find that the name is 'bob'
0
10461
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
1
10190
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
1
7555
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
6796
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
0
5447
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
0
5579
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
1
4122
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
2
3736
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.
3
2928
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.