Mono.Posix PInvoke使堆栈失衡

时间:2016-04-14 13:25:55

标签: c# mono internationalization gettext xgettext

只有这个Mono图书馆的头痛...... 我从this internationalization tutorial创建了简单的C#控制台应用程序 它在使用mono构建它时有效,但我想使用Visual Studio构建/运行它。我将Mono.Posix nuget添加到项目中。

程序看起来像这样:

using System;
using Mono.Unix;
using System.Globalization;
using System.Threading;

    public class i18n
    {
        public static void Main(string[] argv)
        {
            Catalog.Init("lv", "./locale");
            Console.WriteLine(Catalog.GetString("My name is {0}"), "Enzo");
            int i = 20;
            Console.WriteLine(Catalog.GetPluralString("I'm {0} year old.", "I'm {0} years old.", i), i);
            i = 21;
            Console.WriteLine(Catalog.GetPluralString("I'm {0} year old.", "I'm {0} years old.", i), i);
            i = 22;
            Console.WriteLine(Catalog.GetPluralString("I'm {0} year old.", "I'm {0} years old.", i), i);
            Console.ReadKey();
        }
    }

首先我收到无法找到MonoPosixHelper.dll的错误。添加它。然后intl.dll丢失了。添加。现在我收到PInvokeStackImbalance occured消息:

  

托管调试助手'PInvokeStackImbalance'在'D:\ TESTS \ i18n \ i18n \ bin \ x86 \ Debug \ i18n.vshost.exe'中检测到问题。

     

附加信息:调用PInvoke函数'Mono.Posix!Mono.Unix.Catalog :: bindtextdomain'使堆栈失衡。这很可能是因为托管PInvoke签名与非托管目标签名不匹配。检查PInvoke签名的调用约定和参数是否与目标非托管签名匹配。

这一切都发生在Catalog.Init("lv", "./locale"); 我不知道什么是错误/缺失等。

0 个答案:

没有答案