为什么我无法解决AW.实用程序返回代码和实例异常

本文关键字:代码 返回 实例 异常 实用程序 AW 解决 为什么 | 更新日期: 2023-09-27 18:31:08

对不起,标题有点令人困惑,但这是我在不占用太多空间的情况下解释它的最佳方式。请原谅我的格式,我对堆栈溢出很陌生。这就是问题所在,我为C++ SDK的C#包装器找到了一些示例代码。使用SDK的程序称为ActiveWorlds。代码在这里:

using System;
using AW;
namespace GreeterBotCSharp
{
    class GreeterBot
    {
        /// <summary>
        /// Main entry point into the GreeterBot program.
        /// </summary>
        /// <param name="args">Command line arguments.</param>
        static void Main(string[] args)
        {
            //Prompt the user for their citizen number.
            Console.Write("Enter citizen number: ");
            int citizenNumber = int.Parse(Console.ReadLine());
            //Prompt the user for their privilege password.
            Console.Write("Enter privilege password: ");
            string privilegePassword = Console.ReadLine();
            //Prompt the user for a world to enter.
            Console.Write("Enter a world name: ");
            string world = Console.ReadLine();
            //Create a new copy of the GreeterBot and run it.
            GreeterBot bot = new GreeterBot();
            bot.Run(citizenNumber, privilegePassword, world);
        }
        /// <summary>
        /// Runs a new GreeterBot with the specified owner and privilege password.
        /// </summary>
        /// <param name="owner">The citizen number of the person who owns the bot.</param>
        /// <param name="password">The privilege password of the person who owns the bot.</param>
        /// <param name="world">The name of the world to greet in.</param>
        private void Run(int owner, string password, string world)
        {
            try
            {
                //Create a new instance and set events
                Instance greeterBot = new Instance();
                greeterBot.EventAvatarAdd += new Instance.Event(greeterBot_EventAvatarAdd);
                //Log the instance into the ActiveWorlds universe
                try
                {
                    greeterBot.SetInt(Attributes.LoginOwner, owner);
                    greeterBot.SetString(Attributes.LoginPrivilegePassword, password);
                    greeterBot.SetString(Attributes.LoginName, "GreeterBot");
                    greeterBot.Login();
                }
                catch (InstanceException ex)
                {
                    Console.WriteLine("Failed to login (Reason: {0}).", Utility.ReturnCodes[ex.ErrorCode]);
                    return; //Application failed, quit.
                }
                //Enter a world and attempt to go to ground zero.
                try
                {
                    greeterBot.Enter(world);
                    greeterBot.StateChange();
                }
                catch (InstanceException ex)
                {
                    Console.WriteLine("Failed to enter world at ground zero (Reason: {0}).", Utility.ReturnCodes[ex.ErrorCode]);
                    return; //Application failed, quit.
                }
                //Event dispatch loop.  This is important, without it events would not be dispatched appropriately.
                while (Utility.Wait(-1) == 0) ;
            }
            catch (InstanceException ex)
            {
                Console.WriteLine("Unexpected Error (Reason: {0}).", Utility.ReturnCodes[ex.ErrorCode]);
                return; //Application failed, quit.
            }
        }
        /// <summary>
        /// Event handler for avatars entering the proximity of the bot.
        /// </summary>
        /// <param name="sender">The instance that received the event.  This is extremely important,
        /// especially if instances share common event handlers.  We use it here to control the instance.</param>
        void greeterBot_EventAvatarAdd(Instance sender)
        {
            try
            {
                //Store the session and name of the avatar, and the name of the world.
                int userSession = sender.GetInt(Attributes.AvatarSession);
                string userName = sender.GetString(Attributes.AvatarName);
                string worldName = sender.GetString(Attributes.WorldName);
                //Greet the user via a whisper. Whisper makes use of a session number to target a user
                //Session numbers are an extremely important concept in the SDK and are used to identify
                //users when certain events occur or when sending some command to a specific user.
                sender.Whisper(userSession, "Welcome to {0}, {1}! Enjoy your stay.", worldName, userName);
                //Show that the user was greeted on the console.
                Console.WriteLine("Greeter user {0}.", userName);
            }
            catch (InstanceException ex)
            {
                Console.WriteLine("Failed to greet user (Reason: {0}).", Utility.ReturnCodes[ex.ErrorCode]);
            }
        }
    }
}

但它不起作用!这是我的规格:

  • Microsoft视窗 8.1
  • Microsoft Visual Studio Express 2012 for Windows
  • 迈克菲网络安全特警(你永远不知道...

以下是该项目的组成:

  • 一个 Visual C# 空项目
  • x86解决方案平台(必填)

并包括以下文件

  • 一个名为 MainScript.cs 的 C# 类(其中包含上面的代码)
  • 一个AW。核心.dll项目根文件夹中的文件,作为引用添加。(这是包装器)
  • 位于 RootFolder''bin''x86''Release'' 中的 Aw.dll 文件(这是包装器使用C++ DLL)
  • C# 空项目中的常见事项

这些是我唯一调整的东西我得到的错误是:

错误 3 'AW。实用程序"不包含"返回代码"的定义 第 54 行 第 81 列

错误 5 'AW。实用程序"不包含"返回代码"的定义 第 66 行第 102 列

错误 7 'AW。实用程序"不包含"返回代码"的定义 第 76 行第 78 列

错误 9 'AW。实用程序"不包含"返回代码"的定义 第 105 行第 82 列

错误 1 类型"AW"中不存在类型名称"事件"。实例第 42 行 第 59 列

错误 2 找不到类型或命名空间名称"实例异常"(是否缺少 using 指令或程序集引用?第 52 行 第 24 列

错误 4 找不到类型或命名空间名称"实例异常"(是否缺少 using 指令或程序集引用?第 64 行第 24 列

错误 6 找不到类型或命名空间名称"实例异常"(是否缺少 using 指令或程序集引用?第 74 行第 20 列

错误 2 找不到类型或命名空间名称"实例异常"(是否缺少 using 指令或程序集引用?第 103 行第 20 列

您可能想知道在哪里可以获得.dlls,这里有一些链接

  • Activeworlds SDK(C++ .dll)可在此处找到:http://wiki.activeworlds.com/index.php?title=SDK
  • 我正在使用的SDK(C++ .dll)的下载在这里:http://objects.activeworlds.com/downloads/awsdk101.zip
  • 包装器(C# .dll)的源代码可以在此处找到:https://github.com/Bloyteg/AW.SDK.Core(注意,信息可能不是那么准确)
  • 可在此处找到 C# 包装器的下载:https://github.com/Bloyteg/AW.SDK.Core/releases/download/0.3.14.100/AW.Core.zip

(引用的原因是因为我无法再发布任何链接)

请看一下这个。我对Visual Studio很陌生,因为我通常使用Unity 3D和MonoDevelopment编写代码。我是一名 Ameteur C# 编码员,所以请耐心等待。这是一个文档不太齐全的过程,使用它的开发人员通常会忙于像我这样的人。此外,其他编码人员使用 VB.net 和 C++ 而不是 C#。

为什么我无法解决AW.实用程序返回代码和实例异常

查看您链接到的来源,AW。Utility.ReturnCodes 不存在。

将异常写入

控制台的所有位置更改为仅写入异常。

Console.WriteLine("Unexpected Error: {0}.", ex);

另外,看起来没有实例异常类。 您确定您不是在寻找以下之一:https://github.com/Bloyteg/AW.SDK.Core/tree/master/AW.Core/AW/Exceptions

最后,你在这里错过了一些代码吗?编译器抱怨对不存在的"事件"类型的引用,但我在您提供的代码中没有看到这一点。 我的前两条评论应该可以解决您的大部分问题,如果您需要更多帮助,请告诉我。