Возврат строки из managed в unmanaged код
От: Kisloid Мухосранск  
Дата: 21.09.06 17:17
Оценка:
Проблема возникла такая, пишу COM объект под .NET. Он реализует некий интерфейс из tlb'хи. Там есть метод такой:

interface IStuff : IUnknown
{
    ...
    const char * GetSomeString() ;
    ...
}


При реализации его в C#'е делаю так:

    public class Stuff : IStuff
    {

        [return: MarshalAs(UnmanagedType.LPStr)]
        public string GetSomeString()
        {
            return "sample string";
        }
                ...
        }


Компилер ругается, что возвращается не подходящий тип
((lambda (x) (list x (list 'quote x))) '(lambda (x) (list x (list 'quote x))))
Re: Возврат строки из managed в unmanaged код
От: Kisloid Мухосранск  
Дата: 22.09.06 09:43
Оценка: -1
        public unsafe IntPtr GetSomeString()
        {
            string someString = "sample string";
            sbyte[] buffer = new sbyte [someString .Length + 1];

            for (int i = 0; i < someString .Length; i++)
            {
                buffer[i] = (sbyte) someString [i];
            }

            buffer[someString .Length] = 0;

            fixed (sbyte * p = buffer)
            {
                return new IntPtr(p);
            }
        }


Сделал так пока так
((lambda (x) (list x (list 'quote x))) '(lambda (x) (list x (list 'quote x))))
Re: Возврат строки из managed в unmanaged код
От: vitz  
Дата: 22.09.06 10:05
Оценка:
Здравствуйте, Kisloid, Вы писали:

K>Проблема возникла такая, пишу COM объект под .NET. Он реализует некий интерфейс из tlb'хи. Там есть метод такой:


K>
K>interface IStuff : IUnknown
K>{
K>    ...
K>    const char * GetSomeString() ;
K>    ...
K>}
K>


K>При реализации его в C#'е делаю так:


K>
K>    public class Stuff : IStuff
K>    {

K>        [return: MarshalAs(UnmanagedType.LPStr)]
K>        public string GetSomeString()
K>        {
K>            return "sample string";
K>        }
K>                ...
K>        }
K>


K>Компилер ругается, что возвращается не подходящий тип


UnmanagedType.BStr
Re[2]: Возврат строки из managed в unmanaged код
От: Kisloid Мухосранск  
Дата: 22.09.06 10:14
Оценка:
Здравствуйте, vitz, Вы писали:

V>UnmanagedType.BStr


Не получается.
((lambda (x) (list x (list 'quote x))) '(lambda (x) (list x (list 'quote x))))
Возврат строки из managed в unmanaged код
От: Аноним  
Дата: 22.09.06 11:25
Оценка:
Просто для параметров было StringBuilder, подойдет ли в качестве ретурна функции не помню.
-----
Нулевое оформления постов благодаря Opere.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.