Software Development


arrowb.gifHow can I programmatically cancel my call or request to join a conference before it succeeds?

arrowb.gifHow can I programmatically leave a conference in which I am participating?

arrowb.gifWhat is the difference between a Conference object (INmConference) and a Call object (INmCall)?

arrowb.gifHow can I programmatically change the application sharing state in the same way that clicking the Collaborate button in NetMeeting does?

arrowb.gifWhy is my data broken into 4K chunks when I use SendData?

arrowb.gifIs there a limit to the amount of data that can be sent using SendData?

arrowb.gifHow can I launch a copy of my application on a remote computer?

arrowb.gifHow can I create a directory of users in my product?

arrowb.gifWhen do I have to use AddRef and Release in NetMeeting?

arrowb.gifHow can I reactivate audio or video in the NMUI sample after I have disabled them?

arrowb.gifHow can I switch audio and video between participants in my meeting?

arrowb.gifHow can I get the conference name for a conference I have joined?

arrowb.gifHow can I add a NetMeeting call link to my Web page?

UpBack to Frequently Asked Questions

How can I programmatically cancel my call or request to join a conference before it succeeds?

The INmCall::Cancel method can be used to cancel placement of a call or to cancel a request to join a conference. Here's an excerpt from the NetMeeting 2.1 SDK documentation.

INmCall::Cancel
HRESULT Cancel(void);
// Cancels the request to join a conference.

When the call is canceled, the application will receive a NM_CALL_CANCELED call state change notification for the Call object.

UpBack to list of Software Development questions

How can I programmatically leave a conference in which I am participating?

The INmConference::Leave method can be used to leave (hang up) a conference in which you are currently participating. Here's an excerpt from the NetMeeting 2.1 SDK documentation.

INmConference::Leave
HRESULT Leave(void);
// Removes the local computer from the active conference.

The conference state will change to NM_CONFERENCE_IDLE after all of the members and channels have been removed from the conference.

UpBack to list of Software Development questions

What is the difference between a Conference object (INmConference) and a Call object (INmCall)?

A Conference object has channels and participants (members) while a Call object refers to a specific computer or user. A call is an invitation to join a conference.

UpBack to list of Software Development questions

How can I programmatically change the application sharing state in the same way that clicking the Collaborate button in NetMeeting does?

Use the INmChannelAppShare::SetState method to set the current state to NM_SHARE_IN_CONTROL. This interface provides the same behavior as the Collaborate button in the NetMeeting user interface. It puts the user in the collaborating state and gives the user control of the cursor. Here is an excerpt from the NetMeeting 2.1 SDK documentation.

INmChannelAppShare::SetState
[in] NM_SHARE_STATE uState,
// Sets the app sharing state of the local user.

The uState parameter identifies the desired application sharing state. The following values are currently supported for uState:
NM_SHARE_IN_CONTROL start collaborating and automatically take control of the sharing system
NM_SHARE_WORKING_ALONE stop collaborating

UpBack to list of Software Development questions

Why is my data broken into 4K chunks when I use SendData?

When INmChannelData::SendData is used with more than 4096 bytes, the low-level T.120 layer breaks the data into manageable packets. The receiveing system can detect this by checking the dwFlags parameter during the INmChannelDataNotify::DataReceived notification.

UpBack to list of Software Development questions

Is there a limit to the amount of data that can be sent using SendData?

A maximum of 65,535 bytes can be sent at a time using the SendData method. This is because the T.120 stack in NetMeeting has a limited amount of memory available for sending data. It is recommended that you segment data into sizes smaller than 4K to optimize for T.120 traffic.

It is important to note that you should always be prepared for SendData to fail regardless of the packet size you choose because other clients of the SDK might be sharing the NetMeeting data channel with your application.

UpBack to list of Software Development questions

How can I launch a copy of my application on a remote computer?

You can use the INmConference::LaunchRemote method to launch a remote copy of your application when in an active conference. To do this, you need two pieces of information:

HRESULT LaunchRemote(
[in] REFGUID rguid,
[in] INmMember *pMember);
hr = g_pConference->LaunchRemote(guid, pMember);

UpBack to list of Software Development questions

How can I create a directory of users in my product?

The Internet Locator Server COM interface, included in the NetMeeting 2.1 SDK, enables you to include directory services in your application.

UpBack to list of Software Development questions

When do I have to use AddRef and Release in NetMeeting?

When using the NetMeeting COM interface, you should follow the same rules for use of AddRef and Release as in other COM applications. These are outlined in detail in Chapter 2 of Inside OLE, Second Edition.

When an interface is returned from a method, it must be released. It is not necessary to AddRef or Release an object in a notification callback unless the application intends to use it after the function returns.

UpBack to list of Software Development questions

How can I reactivate audio or video in the NMUI sample after I have disabled them?

To reactivate the destination channel for audio or video, use the SetActive method on the Channel object for the destination channel. Here's an excerpt from the NetMeeting 2.1 SDK documentation.

HRESULT SetActive(
BOOL fActive);
// Sets the channel to active or inactive.

Note Instead of disabling the audio and video, you can use the Pause property for each of these channels to achieve a similar effect without actually disconnecting the channel.

For video, use the INmChannelVideo::SetProperty method and set the NM_VIDPROP property to NM_VIDPROP_PAUSE. Here's an excerpt from the NetMeeting 2.1 SDK documentation.

HRESULT SetProperty( 
[in] NM_VIDPROP uID,
[in] ULONG uValue);
// Sets the display properties of the current video channel.

For audio, use the INmChannelAudio::SetProperty method and set the NM_AUDPROP property to NM_AUDPROP_PAUSE (paused). Here's an excerpt from the NetMeeting 2.1 SDK documentation.

HRESULT SetProperty(
[in] NM_AUDPROP uID,
[in] ULONG uValue);
// Sets the property values of the current audio channel.

How can I switch audio and video between participants in my meeting?

To switch audio and video from one meeting participant to another, you must:

  1. Deactivate the currently active audio channel.
  2. Activate the audio channel with the member to whom you are going to switch.

If you do not already have your own pointers to the appropriate audio channels, you can find a specific audio channel by using INmConference::EnumChannel to get an enumerator for all the channels in the conference. Here's an excerpt from the NetMeeting 2.1 SDK documentation.

HRESULT EnumChannel(
[out] IEnumNMChannel **ppEnum);

Then use IEnumNmChannel::Next to traverse the list of channels until you find the audio channel for the member you want to switch to. Here's an excerpt from the NetMeeting 2.1 SDK documentation.

HRESULT Next(
[in] ULONG cConference,
[out] INmConference **rgpConference,
[out] ULONG *pcFetched);

An audio channel can be identified using INmChannel::GetNmch:

HRESULT GetNmch(
[out] ULONG *puCh);

The value returned in by puCh will be NMCH_AUDIO if it is an audio channel.

For each of the audio channels, you can then use INmChannel::EnumMember to get an enumerator for all the Member objects in each channel. Note that the audio channel will have only one member.

HRESULT EnumMember(
[out] IEnumNmMember **ppEnum);

The easiest way to deactivate the current audio channel is to set your own active audio channel to inactive using INmChannel::SetActive:

HRESULT SetActive(
BOOL fActive);

Make sure to set fActive to FALSE.

Wait for the INmConferenceNotify::ChannelChanged notification. When you get it, check to make sure that the notification is for the channel that you just deactivated and that the channel's state is NM_AUDIO_IDLE.

Finally, to activate the destination channel for audio and video, use the SetActive method on the Channel object for the destination channel to set fActive to TRUE.

UpBack to list of Software Development questions

How can I get the conference name for a conference I have joined?

INmConference::GetName can be used to retrieve the name of the conference in which a member is participating. However, a called member should not use this method until it receives an NM_MEMBER_UPDATED notification for itself and the member's capabilities include NMCH_DATA. For example:


case NM_MEMBER_UPDATED:
hResult = pMember->GetNmchCaps(&uCaps);
if ((uCaps == NMCH_DATA) && (S_OK == pMember->IsSelf()))
//if the member has Data Channel capabilities, you can GetName
hResult = pConf->GetName(&bstrConfName);

UpBack to list of Software Development questions

How can I add a NetMeeting call link to my Web page?

Using Microsoft® Internet Explorer, people can call you using a link on your Web page even if they do not have NetMeeting running. Use one of the following formats to create a NetMeeting call link on your Web page:

Format Example
callto:DNS name callto:machine2.test.com
callto:IP address callto:157.55.22.31
callto:e-mail address callto:user@test.com
callto:server name/e-mail address callto:uls4.microsoft.com/user@test.com

For example, if John Smith wanted to embed a link in his Web page so that other people could call him, he would add the following HTML tag:


Call me using NetMeeting at
<A HREF="callto:uls.microsoft.com/jsmith@somedomain.com>
uls.microsoft.com/jsmith@somedomain.com</A>

UpBack to list of Software Development questions

Last Updated: November 1, 1997
© 1997 Microsoft Corporation. All rights reserved. Terms of Use.