2

有一些类(.NET Framework 3.5)包含一些在 .NET Compact Framework 中受支持的方法,以及一些不受支持的方法。还有一些 .NET Compact Framework 不存在的类。

例如对于System.IO.File类,File.Create.NET Compact Framework 支持该函数,但该File.Encrypt函数不支持。

另一个例子:System.IO.File.NET Compact Framework 支持该类,但System.Diagnostic.StackTrace不支持。

我需要告诉编译器这样的事情:

#ifdef COMPACT_FRAMEWORK   // I'm compiling this from a smart device project

MyEncryptMethod("filename");

#else // I'm compiling this from a desktop project

File.Encrypt("filename");

#endif

我能怎么做?
(具体版本为Windows Mobile 6.1 Professional)。

4

3 回答 3

3

只是要补充一点,因为您正在显示windows-mobileand windows-mobile-6,您应该将#define约束更改为PocketPC而不是COMPACT_FRAMEWORK

#ifdef PocketPC   // PocketPC is what the WM SDK uses

MyEncryptMethod("filename");

#else // I'm compiling this from a desktop project

File.Encrypt("filename");

#endif

更新:

尼克: yms 说的。:) 使用智能设备项目之一构建项目时,Visual Studio 会自动将条件编译符号添加PocketPC到项目中。

在 VS2008 的主菜单中,单击项目并在底部选择项目的属性。

在项目的 Properties 页面上,转到 Build 选项卡,在那里您将看到PocketPC已为您定义的位置。

于 2012-11-07T16:51:13.910 回答
2

您提供的代码很好,您只需定义COMPACT_FRAMEWORK编译符号。

首先,定义在为紧凑框架构建程序集时将使用的构建配置。然后,在这个构建配置中,只定义COMPACT_FRAMEWORK条件编译符号。

条件编译符号在Build项目属性的选项卡中定义。

于 2012-11-06T12:52:37.703 回答
0

这是一些在类中查找方法的代码:

    public static bool execCmd(string sFunc, string sArg, ref string sResponse)
    {
        bool bRet = true;
        try
        {
            // Instantiate this class
            myCommands cmbn = new myCommands(sFunc, sArg);

            // Get the desired method by name: DisplayName
            //MethodInfo methodInfo = typeof(CallMethodByName).GetMethod("DisplayName");
            MethodInfo methodInfo = typeof(myCommands).GetMethod(sFunc);

            // Use the instance to call the method without arguments
            methodInfo.Invoke(cmbn, null);
            sResponse = cmbn.response;
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine("Exception in execCmd for '" + sFunc + "' and '" + sArg + "' " + ex.Message); 
            bRet = false; 
        }
        return bRet;
    }

您必须将 myCommands 更改为您正在搜索的类,并且 sFunc 必须设置为您正在寻找的方法。使用该代码,您可以检查类中是否存在方法。

~约瑟夫

于 2012-11-09T18:11:46.027 回答