【问题标题】:comparing strings in c# which calls C dll比较调用C dll的c#中的字符串
【发布时间】:2012-07-04 17:24:52
【问题描述】:

(学习 c# 的第 2 天)我正在将缓冲区从 C# 传递给 C dll。 C 函数将字符串“text”复制到缓冲区中。回到 C# 代码中,我将“文本”与缓冲区中的内容进行比较,但结果并不相等。我错过了什么?

    extern "C" __declspec( dllexport )      
    int  cFunction(char *plotInfo, int bufferSize) 
    {
        strcpy(plotInfo, "text");
        return(0);
    }

c#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;


namespace ConsoleApplication1
{
    class Program
    {
        [DllImport("mcDll.dll", CallingConvention = CallingConvention.Cdecl,
                                                      CharSet=CharSet.Ansi)]
        public static extern int cFunction(StringBuilder theString, int bufSize);

        static void Main(string[] args)
        {
            StringBuilder s = new StringBuilder(55);
            int result = cFunction(s, 55);
            Console.WriteLine(s);

            string zz = "text";
            if (s.Equals(zz))
                Console.WriteLine( "strings compare equal");
            else
                Console.WriteLine("not equal");

            Console.ReadLine();
        }
    }
}

【问题讨论】:

    标签: c# c string dll marshalling


    【解决方案1】:

    sStringBuilder,而 zzstring

    尝试比较

    s.ToString().Equals(zz);
    

    通常,Equals() 对引用类型执行引用比较。某些类(例如 String)覆盖 Equals() 以允许将包含相同字符的字符串视为相等(尽管出于性能目的,我相信实际实现首先检查引用相等,然后比较每个字符串的内容)。

    您当前的代码正在调用StringBuilder 的.Equals() 方法。

    【讨论】:

      【解决方案2】:

      没有内置的比较 StringBuilderstring 比较任何 StringBuilderstring 将始终返回 false

      StringBuilder 类有两个 Equals 重载:

      1. Equals(object) 继承自 object 并执行参考比较。
      2. Equals(StringBuilder) 根据它们包含的字符串比较两个 StringBuilders

      您正在调用重载 1,因此它不比较内容。

      s 上调用.ToString() 以获取它包含的字符串,然后在其上调用Equals 以进行字符串比较。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-19
        相关资源
        最近更新 更多