В текущей версии Qyoto (ver. 4.5.0.0, 2011-06-01) конструктор класса QVariant(String) имеет баг из-за которого QVariant не поддерживает юникодные строки. Связано это с тем, что внутри managed QVariant вызывается не тот unmanaged конструктор:
QVariant(const char*)вместо
QVariant(const QString&)
Лечится это довольно просто: создается managed класс, назовем его QVariantQString, наследующий QVariant с единственным конструктором принимающим System.String и вызывающим внутри нужный unmanaged конструктор. Далее везде, где нужно создать QVariant( String ), нужно создавать QVariantQString( String ).
Ниже приведен полный работающий код этого класса:
Ниже приведен полный работающий код этого класса:
using System;
namespace Qyoto
{
[SmokeClass("QVariant")]
internal class QVariantQString : QVariant
{
protected QVariantQString(Type dummy) : base(dummy) {}
protected new void CreateProxy()
{
interceptor = new SmokeInvocation(typeof(QVariantQString), this);
}
public QVariantQString(string str) : this((Type) null)
{
CreateProxy();
interceptor.Invoke("QVariant$", "QVariant(const QString&)", typeof(void), typeof(string), str);
}
} //class
} //namespace
* This source code was highlighted with Source Code Highlighter.
Комментариев нет:
Отправить комментарий