用msagent组件尝试写了一个控制台程序。
可是编译时告诉我下面这些错误。
大家不必关心程序实现的功能以及编译产生的其他错误,只要帮我看看为啥会说由#import声称的msagent提供的IAgentExPtr智能指针会是未声明的标识符?g:\test\DotNetTest\com Pro\merlin\Merlin\Merlin\Merlin.cpp(15) : error C2065: “IAgentExPtr” : 未声明的标识符
g:\test\DotNetTest\com Pro\merlin\Merlin\Merlin\Merlin.cpp(15) : error C2146: 语法错误 : 缺少“)”(在标识符“ptrAgent”的前面)
......
......
g:\test\DotNetTest\com Pro\merlin\Merlin\Merlin\Merlin.cpp(67) : error C2447: “{” : 缺少函数标题(是否是老式的形式表?)
g:\test\DotNetTest\com Pro\merlin\Merlin\Merlin\Merlin.cpp(81) : fatal error C1057: 宏展开中遇到意外的文件结束程序部分代码:
#define _WIN32_DCOM#include <windows.h>
#include <iostream>
#include <TCHAR.h>#import "C:\WINDOWS\msagent\agentsvr.exe"#pragma warning(push)
#pragma warning(disable : 4290)const long PAUSE_AFTER_SPEAKING=20000;
const BSTR DEFAULT_SPEECH=L"This is a test of Emergency Broadcast System!!";void SayIt(IAgentExPtr ptrAgent,_bstr_t message_text)
throw(_com_error);int main(int argc,char * argv[])
{
HRESULT hr;
int n_return=0; try
{
int arg_count=1;
_bstr_t message_text;
IAgentExPrt ptrAgent; hr=CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
if(FAILED(hr))
{
_com_issue_error(hr);
} if(argc>arg_count)
message_text=argv[arg_count];
else 
message_text=DEFAULT_SPEECH; hr=ptrAgent.CreateInstance(__uuidof(AgentSever)); if(FAILED(hr))
{
_com_issue_error(hr);
} SayIt(ptrAgent,message_text);
}
catch(_com_error e)
{
std::cout<<"Error("<<e.Error()<<");  "; if(e.Description().length()>0)
std::cout<<(char*)e.Description()<<std::endl; std::cout<<e.ErrorMessage()<<std::endl;
n_return=1; CoUninitialize(); return n_return;
}}HRESULT CreateAgent(IAgentExPtr ptrAgent,_bstr_t Machine,COAUTHIDENTITY AthorId)
{
HRESULT hr;
COAUTHINFO author_info;
COSERVERINFO server_info;
MULTI_QI mqi[1]; if(Machine.length()==0)
{
hr=ptrAgent.CreateInstance(__uuidof(AgentServer));
if(FAILED(hr))
_com_issue_error(hr);
}
else 
{
ZeroMemory(&uthor_info,sizeof(author_info);
author_info.dwAuthnSvc=RPC_C_AUTHN_WINNT;
author_info.dwAuthzSvc=RPC_C_AUTHZ_NONE;
author_info.dwImpersonationLevel=RPC_C_IMP_LEVEL_IMPERSONATE;
author_info.dwCapabilities=EOAC_NONE;
author_info.pAuthIdentityData=&AuthorId; ZeroMemory(&server_info,sizeof(server_info);
server_info.pwszName=Machine;
server_info.pAuthInfo=&author_info; ZeroMemory(mqi,sizeof(mqi[]);
mqi[0].pIID=&__uuidof(IAgentEx);
mqi[0].pItf=static_cast<IUnknown*>(ptrAgent); hr=CoCreateInstanceEx(__uuidof(AgentServer),NULL,CLSCTX_REMOTE_SERVER,&server_info,1,mqi); if(FAILED(hr))
{
}
else if(FAILED(mqi[0].hr))
{
hr=mqi[0].hr;
ptrAgent=NULL;
}
else 
ptrAgent.Attach(reinterpret_cast<IAgentEX*>(mqi[0].pItf)); } return hr;
}void SayIt(IAgentExPtr ptrAgent,_bstr_t message_text)
{
HRESUTL hr=E_FAIL; IAgentCharacterExPtr pCharacter;
IDispatchPtr ptr_idisp_character;
VARIANT var;
VariantInit(&var);
long nCharacterId;
long nRequestId; ptrAgent->Load(var,&nCharacterId,&nRequestId);
VariantClear(&var);
ptrAgent->GetCharacter(nCharacterId,&ptr_idisp_character);
pCharacter=ptr_idisp_character;
ptr_idisp_character.Release(); pCharacter->Show(false,&nRequestId);
pCharacter->Speak(message_text,L"",&nRequestId);
Sleep(PAUSE_AFTER_SPEAKING);
pCharacter->Hide(1L,&nRequestId);
PCharacter.Release();
ptrAgent->Unload(nCharacterId);
}#pragma warning(pop)