我用c++biuder 5制作小精灵是可以通过,可是c++biuder 6时总是跳不过去,总是说TAgent未定义,那位有做过的代码请给我一份,或提示我怎样调通。
问题点数:
100、回复次数:
23
1楼
F117p (
走两步,你走两步?)
回复于
2005-06-11 22:29:30 得分
0
先安装这个TAgent。
在Import Active Library中找到这个东西,安装
4楼
constantine (
飘遥的安吉儿)
回复于
2005-06-13 15:39:15 得分
70
首先确认安装了,之后看一下这段代码
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "AgentObjects_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
load=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(load==false)
{
if(OpenDialog1->Execute())
{
wact="a";
act=wact;
char tmp[100];
GetWindowsDirectory(tmp,100);
path=OpenDialog1->FileName;
try
{
Agent1->Characters->Load(act,path);
}
catch(...)
{
ShowMessage("不能正常载入精灵助手!");
return;
}
numan=Agent1->Characters->Character(act);
numan->Show(0);
talk="大家好,我是精灵助手,有什么疑问尽管问我好了!";
numan->Speak(talk,"");
load=true;
}
}
else
ShowMessage("精灵助手已经载入了,请不要重复加载!");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if(load==true)
{
talk="Bye bye 我走了!";
numan->Speak(talk,"");
Sleep(1000);
Agent1->Characters->Unload(act);
load=false;
}
else
ShowMessage("请先载入精灵助手!");
}
//---------------------------------------------------------------------------
WideString tmpact[28]={"Acknowledge","LookDown",
"Sad","Alert","LookDownBlink","Search","Announce",
"LookUp","Blink","LookUpBlink","Confused",
"LookLeft","Suggest","Congratulate","LookLeftBlink",
"Surprised","Decline","LookRight","Think",
"DontRecognize","LookRightBlink","Wave","Explain",
"Write","Pleased","Read","Greet","RestPose"};
void __fastcall TForm1::RadioGroup1Click(TObject *Sender)
{
if(load==true)
{
BSTR active=tmpact[RadioGroup1->ItemIndex];
try
{
numan->Play(active);
talk="我现在正在"+RadioGroup1->Items->Strings[RadioGroup1->ItemIndex]+"呢!";
numan->Speak(talk,"");
}
catch(...)
{
talk="对不起,没有"+RadioGroup1->Items->Strings[RadioGroup1->ItemIndex]+"这个动作!";
numan->Speak(talk,"");
}
}
else
ShowMessage("请先载入精灵助手!");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
if(load==true)
{
talk="我要藏起来了!";
numan->Speak(talk,"");
numan->Hide(0);
}
else
ShowMessage("请先载入精灵助手!");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
if(load==true)
{
numan->Show(0);
talk="嘿嘿,我又来了!";
numan->Speak(talk,"");
}
else
ShowMessage("请先载入精灵助手!");
}
//---------------------------------------------------------------------------
5楼
slchen (
笨鸟先飞)
回复于
2005-06-14 17:37:49 得分
0
我安装的Mcrosoft Agent Control 2.0,安装以后,把控件放到窗体上,没有任何代码都编译部过去(cb6),但是在cb5上就没有此问题。
寻求解决办法!!!!!
6楼
fanyufanyu (
反语)
回复于
2005-06-16 09:23:15 得分
0
这个问题可能和你的windows版本和补丁有关。在导入Active库的时候,虽然有时编译报错,但当你把这些出错语句用注释注掉的话,还是能正常工作的,我在BCB6中就遇到过几次这样的问题。最后还有一种可能,就是微软角色代理安装的不正确,一般的COM类东东,最好是开发版本和发行版本一样,不然有可以发生潜在的错误。
10楼
fanyufanyu (
反语)
回复于
2005-06-17 09:59:09 得分
0
你的项目是不是从CB5升迁到CB6的呀,说不定是这个问题,你机器里的其它用角色代理的程序的角色能正常工作吗?如office,杀毒软件等。
11楼
wg961423 (
臭虫)
回复于
2005-06-17 10:11:20 得分
0
我用的也有问题:安装好Mcrosoft Agent Control 2.0后,把控件放在窗体上,没有任何代码,编译通过,但按网上的一些例子写了后,Link就出错了([Linker Error] Unresolved external 'Agentobjects_tlb::IID_IAgentCtlCharacterEx' referenced from E:/BCB/AGENT/UNIT1.OBJ)。
这是什么问题呢?
XP SP2 BCB6.0
12楼
F117p (
走两步,你走两步?)
回复于
2005-06-19 03:22:14 得分
30
以下是bcb6下编译连接通过。
TVariant mv("C://WINDOWS//msagent//chars//merlin.acs");
IAgentCtlRequest *pR= Agent1->Characters->Load(WideString("merlin").c_bstr(),mv);
// IAgentCtlCharacter *Character=Agent1->Characters->Character(WideString("merlin"));
IAgentCtlCharacterEx* Character =
(IAgentCtlCharacterEx*)Agent1->Characters->Character(WideString("merlin").c_bstr());
Character->Show(TVariant(0));
Character->MoveTo(100,100,TVariant(2));
Character->Play(WideString("Search"));
对于和bcb5的不同,由于TVariant类型的转换,和BSTR的问题,导致了在bcb6下不能编译通过,可能是bcb6类型检查更加严格了吧?
13楼
slchen (
笨鸟先飞)
回复于
2005-06-19 10:11:16 得分
0
能帮忙解释一下,上面代码的用法吗?我把他们加到FormCreat里,和没加的时候一样,还是编译部过去,还是出来一个cpu的对话框,在按f9,就谈出对话框(翻译):工程文件中的消息出错,可惜没办法把图片贴上去。
14楼
F117p (
走两步,你走两步?)
回复于
2005-06-19 15:06:47 得分
0
试下把Agent卸了,再重新安装。
或重新写个工程,再然连CBuilder6/Import里的那个lib也加入到工程里去
以上代码,可以原封不动的拷贝过去,比如考到一个Button的OnClick事件里。
能编译和连接,运行正常显示小精灵,就是那个老头子
15楼
renfushen (
大鸟)
回复于
2005-06-19 22:11:45 得分
0
能写的在详细写吗?我这个控件第一次使用。
1、怎样卸载
2、“再然连CBuilder6/Import里的那个lib也加入到工程里去”那个lib
谢谢,多帮忙!!
17楼
WiseNeuro (
春之舞)
回复于
2005-06-20 01:09:46 得分
0
to F117p((兰色狐狸)每天都要去检破烂来维持生活):我是了一下,在cb6中它好使,
但想请教一下怎么用Speak(tagVARIENT,tagVARIENT)方法,
Character->Speak(WideString("Hello"),WideString(""));不能编译通过。
18楼
F117p (
走两步,你走两步?)
回复于
2005-06-20 11:49:56 得分
0
re:
把那句改为: Character->Speak(TVariant("Hello"),TVariant(""));
19楼
WiseNeuro (
春之舞)
回复于
2005-06-20 23:06:12 得分
0
谢谢。但为什么执行 Character->Speak(TVariant("Hello"),TVariant(""));
后只有文字显示,而不朗读出来呢?