Mengakses Layanan Menggunakan Java
[Microsoft Agent tidak digunakan lagi pada Windows 7, dan mungkin tidak tersedia dalam versi Windows berikutnya.]
Anda juga dapat mengakses layanan Agen Microsoft dari applet Java. Banyak fungsi yang dapat diakses melalui antarmuka Agen Microsoft mengembalikan nilai melalui parameter yang diteruskan oleh referensi. Untuk meneruskan parameter ini dari Java, perlu untuk membuat array elemen tunggal dalam kode Anda dan meneruskannya sebagai parameter ke fungsi yang sesuai. Jika Anda menggunakan Microsoft Visual J++ dan telah menjalankan Wizard Pustaka Jenis Java di server Agen Microsoft, lihat file summary.txt untuk meninjau fungsi mana yang memerlukan argumen array. Prosedur ini mirip dengan yang ada di C; Anda menggunakan antarmuka IAgentEx untuk membuat instans server, lalu memuat karakter:
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);
}
Prosedur ini sedikit berbeda saat memuat karakter dari lokasi jarak jauh HTTP seperti situs web. Dalam hal ini, metode Muat bersifat asinkron dan akan menaikkan pengecualian COM terhadap E_PENDING (0x8000000a). Anda harus menangkap pengecualian ini dan menanganinya dengan benar seperti yang dilakukan dalam fungsi berikut:
// 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
.
.
.
}
Kemudian dapatkan antarmuka IAgentCharacterEx yang memungkinkan Anda mengakses metodenya:
// 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);
Demikian pula, untuk diberi tahu tentang peristiwa, Anda harus mengimplementasikan IAgentNotifySink atau antarmuka IAgentNotifySinkEx , membuat dan mendaftarkan objek jenis tersebut:
...
// 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]);
...
}
Untuk mengakses Agen Microsoft dari applet Java, Anda harus membuat kelas Java yang Anda instal dengan applet. Anda dapat menggunakan Wizard Pustaka Tipe Java Visual J++, misalnya, untuk menghasilkan file-file ini. Jika Anda berencana untuk menghosting applet di halaman web, Anda harus membangun Java CAB yang ditandatangani termasuk file kelas yang dihasilkan yang diunduh dengan halaman. File kelas diperlukan untuk mengakses Microsoft Agent Server karena merupakan objek COM, yang dijalankan di luar kotak pasir Java.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk