Проблема возникла такая, пишу 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))))
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))))
Здравствуйте, 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
((lambda (x) (list x (list 'quote x))) '(lambda (x) (list x (list 'quote x))))
Просто для параметров было StringBuilder, подойдет ли в качестве ретурна функции не помню.
-----
Нулевое оформления постов благодаря Opere.
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение