Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
[Der Microsoft-Agent ist ab Windows 7 veraltet und kann in nachfolgenden Versionen von Windows nicht verfügbar sein.]
Sie können auch über ein Java-Applet auf Microsoft Agent-Dienste zugreifen. Viele der Funktionen, auf die über die Microsoft Agent-Schnittstellen zugegriffen werden kann, geben Werte über Parameter zurück, die per Verweis übergeben werden. Um diese Parameter aus Java zu übergeben, müssen Sie in Ihrem Code Einzelelementarrays erstellen und als Parameter an die entsprechende Funktion übergeben. Wenn Sie Microsoft Visual J++ verwenden und den Java-Typbibliotheks-Assistenten auf dem Microsoft Agent-Server ausführen, lesen Sie die summary.txt Datei, um zu überprüfen, welche Funktionen Arrayargumente erfordern. Das Verfahren ähnelt dem verfahren in C; Sie verwenden die IAgentEx Schnittstelle, um eine Instanz des Servers zu erstellen, und laden Sie dann das Zeichen:
private IAgentEx m_AgentEx = null;
private IAgentCharacterEx m_Merlin[] = {null};
private int m_MerlinID[] = {-1};
private int m_RequestID[] = {0};
private final String m_CharacterPath = "merlin.acs";
public void start()
{
// Start the Microsoft Agent Server
m_AgentEx = (IAgentEx) new AgentServer();
try
{
Variant characterPath = new Variant();
characterPath.putString(m_CharacterPath);
// Load the character
m_AgentEx.Load(characterPath,
m_MerlinID,
m_RequestID);
}
Das Verfahren unterscheidet sich geringfügig beim Laden von Textzeichen von einem entfernten HTTP-Speicherort wie einer Website. In diesem Fall ist die Load-Methode asynchron und löst eine COM-Ausnahme von E_PENDING (0x8000000a) aus. Sie müssen diese Ausnahme abfangen und sie, wie in den folgenden Funktionen, richtig behandeln.
// Constants used in asynchronous character loads
private final int E_PENDING = 0x8000000a;
private final int NOERROR = 0;
// This function loads a character from the specified path.
// It correctly handles the loading of characters from
// remote sites.
// This sample doesn't care about the request id returned
// from the Load call. Real production code might use the
// request id and the RequestComplete callback to check for
// a successful character load before proceeding.
public int LoadCharacter(Variant path, int[] id)
{
int requestid[] = {-1};
int hRes = 0;
try
{
// Load the character
m_AgentEx.Load(path, id, requestid);
}
catch(com.ms.com.ComException e)
{
// Get the HRESULT
hRes = e.getHResult();
// If the error code is E_PENDING, we return NOERROR
if (hRes == E_PENDING)
hRes = NOERROR;
}
return hRes;
}
public void start()
{
if (LoadCharacter(characterPath, m_MerlinID) != NOERROR)
{
stop();
return;
}
// Other initialization code here
.
.
.
}
Rufen Sie dann die IAgentCharacterEx- Schnittstelle ab, mit der Sie auf deren Methoden zugreifen können.
// Get the IAgentCharacterEx interface for the loaded
// character by passing its ID to the Agent server.
m_AgentEx.GetCharacterEx(m_MerlinID[0], m_Merlin);
// Show the character
m_Merlin[0].Show(FALSE, m_RequestID);
// And speak hello
m_Merlin[0].Speak("Hello World!", "", m_RequestID);
Ähnlich wie müssen Sie, um benachrichtigt zu werden, entweder die IAgentNotifySink- oder die IAgentNotifySinkEx--Schnittstelle implementieren, ein Objekt dieses Typs erstellen und registrieren.
...
// Declare an Agent Notify Sink so that we can get
// notification callbacks from the Agent server.
private AgentNotifySinkEx m_SinkEx = null;
private int m_SinkID[] = {-1};
public void start()
{
...
// Create and register a notify sink
m_SinkEx = new AgentNotifySinkEx();
m_AgentEx.Register(m_SinkEx, m_SinkID);
…
// Give our notify sink access to the character
m_SinkEx.SetCharacter(m_Merlin[0]);
...
}
Um von einem Java-Applet auf Microsoft-Agent zuzugreifen, müssen Sie Java-Klassen generieren, die Sie mit dem Applet installieren. Sie können beispielsweise den Visual J++-Java-Typbibliotheks-Assistenten verwenden, um diese Dateien zu generieren. Wenn Sie beabsichtigen, das Applet auf einer Webseite zu hosten, müssen Sie ein signiertes Java CAB einschließlich der generierten Klassendateien erstellen, die mit der Seite heruntergeladen werden. Die Klassendateien sind erforderlich, um auf den Microsoft Agent Server zuzugreifen, da es sich um ein COM-Objekt handelt, das außerhalb der Java-Sandbox ausgeführt wird.