同洲共际海让路@小舟侧盼千帆过,扬帆寻她千百度
+U, 抬头仰望,低头思索@同洲共际海让路

详细描述:

首先对非托管函数进行声明:

[DllImport("NativeLib.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]

private extern static void TestStringArgumentsFixLength(string inString, StringBuilder outString, int bufferSize);

 

然后再选中“Enable unmanaged code debugging

 

 

编写如下代码进行测试:

private static void TestStringArgumentsFixLength()

        {

            string inString = "This is a input string.";

 

            int bufferSize = inString.Length;

            StringBuilder sb = new StringBuilder(bufferSize);

 

            TestStringArgumentsFixLength(inString, sb, bufferSize + 1);

 

            Console.WriteLine("Original: {0}", inString);

            Console.WriteLine("Copied: {0}", sb.ToString());

        }

 

在红色代码行打断点,按F11可以单步进非托管函数。

 

但是如果修改成:

private static void TestStringArgumentsFixLength()

        {

            string inString = "This is a input string.";

 

            int bufferSize = inString.Length;

            StringBuilder sb = new StringBuilder(bufferSize);

 

            // 如果上面函数调用的最后一个参数用StringBuilder对象的属性指定。

// 虽然运行结果正确,但调试器

            // 将不能单步执行进非托管代码中。这有可能是.NET Framework的小BUG

            TestStringArgumentsFixLength(inString, sb, sb.Capacity + 1);

 

            Console.WriteLine("Original: {0}", inString);

            Console.WriteLine("Copied: {0}", sb.ToString());

        }

 

在红色代码行打断点,按F11无论如何,都无法单步进非托管函数。

 

 

测试环境:

Windows Server 2008

Windows Vista Enterprise

Windows XP SP2

 

开发工具:

Microsoft Visual Studio 2005

Version 8.0.50727.42  (RTM.050727-4200)

Microsoft .NET Framework

Version 2.0.50727 SP1

 

 

需要源代码自己进行尝试的朋友请下载:

源代码


 

posted on 2008-07-30 12:44  同洲共际海让路  阅读(1781)  评论(9编辑  收藏  举报