Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Создать сишарповый враппер для с++ библиотеки


Автор: Cinemaizer[Олег] 11.3.2010, 04:32
Добрый день всем!
Суть задачи в следующем. Имеется SDK продвинутой графической библиотеки GFL (http://www.xnview.com/en/gfl.html).
На данный момент c# враппера в общедоступном варианте нет, к сожалению, а хотелось бы иметь. К слову, камрады из опенсорс-проекта FreeImage таки идут в ногу со временем и FreeImage.Net C# дистрибуцию выложили (http://freeimage.sourceforge.net/download.html). Однако GFL все же повзрослее по возможностям и скорости, посему выбор пал на нее.
В связи с вышеперечисленным, вопрошаю - как долго и сколько бы стоило создание c#-враппера для GFL ?
Заранее спасибо!  smile 

Автор: mrbrooks 11.3.2010, 08:49
дорого, долго

Автор: Cinemaizer[Олег] 11.3.2010, 09:38
ок.  а если "покомандово"? надеюсь, подешевле и недолго ? smile
если серьезно, то конечно весь арсенал не нужен, сейчас конечно. ряд методов, штук с десяток может..

Автор: mrbrooks 11.3.2010, 09:40
Цитата(Cinemaizer[Олег)
, 11.3.2010,  09:38, post2114171]а если "покомандово"

недолго, дорого


Цитата(Cinemaizer[Олег)
, 11.3.2010,  09:38, post2114171]если серьезно, то конечно весь арсенал не нужен, сейчас конечно. ряд методов, штук с десяток может.. 

сделай сам. опыт получишь хороший. DllImport поможет  smile 

Автор: Cinemaizer[Олег] 11.3.2010, 13:58
Да с удовольствием, но... поскольку только только начал понимать азы шарпа, задача для меня оч. сложная... Вот, возьмем к примеру метод 
gflLoadThumbnail . (он мне нужон в первую очередь)

The gflLoadThumbnail function load a picture file as a thumbnail into memory. 

Код

GFL_ERROR gflLoadThumbnail(
  const char * filename,  
  GFL_INT32 width,  
  GFL_INT32 height,  
  GFL_BITMAP ** bitmap,  
  GFL_LOAD_PARAMS * params,  
  GFL_FILE_INFORMATION * informations,  
);


Параметры:

filename : Pointer to a null-terminated string that contains the filename to load. 
width : Width of the thumbnail. 
height : Height of the thumbnail. 
bitmap : Address of a pointer to a GFL_BITMAP structure. 
params : Pointer to a GFL_LOAD_PARAMS structure. 
This structure must be filled correctly. 
informations : Pointer to a GFL_FILE_INFORMATION structure. Can be NULL if you don't want it. 
You must use gflFreeInformation to free his content. 

Return value : The function returns GFL_NO_ERROR if it is successful or a value of GFL_ERROR. 

С типом GFL_INT32 все просто, а как быть с указателями на структуры??? Их тут уйма, и потом еще тянут за собой указатели в структурах... smile
вот, перечислю из хелпа тож...

Код

typedef struct (
  GFL_BITMAP_TYPE Type,  
  GFL_ORIGIN Origin,  
  GFL_INT32 Width,  
  GFL_INT32 Height,  
  GFL_UINT32 BytesPerLine,  
  GFL_INT16 LinePadding,  
  GFL_UINT16 BitsPerComponent,  
  GFL_UINT16 ComponentsPerPixel,  
  GFL_UINT16 BytesPerPixel,  
  GFL_UINT16 Xdpi,  
  GFL_UINT16 Ydpi,  
  GFL_INT16 TransparentIndex,  
  GFL_INT32 ColorUsed,  
  GFL_COLORMAP * ColorMap,  
  GFL_UINT8 * Data,  
  char * Comment,  
  void * MetaData
} GFL_BITMAP


где, 
The GFL_COLORMAP structure is used for colormap. 
Data : Pointer of the picture data. 
Comment : Address of a string used by the comment. You must use gflSetComment to change the comment. 
MetaData : Pointer of Metadata. You must use gflBitmapGetIPTC & gflBitmapGetEXIF to obtain readable data. 

Код

typedef struct (
  GFL_UINT8 Red[256],  
  GFL_UINT8 Green[256],  
  GFL_UINT8 Blue[256]
} GFL_COLORMAP


Red: Array of red components. 
Green: Array of green components. 
Blue: Array of blue components. 

Код

typedef struct (
  GFL_UINT32 Flags,  
  GFL_INT32 FormatIndex,  
  GFL_INT32 ImageWanted,  
  GFL_ORIGIN Origin,  
  GFL_BITMAP_TYPE ColorModel,  
  GFL_UINT32 LinePadding,  
  GFL_UINT8 DefaultAlpha,  
  GFL_UINT8 Reserved1,  
  GFL_UINT16 Reserved2,  
  GFL_INT32 Width,  
  GFL_INT32 Height,  
  GFL_UINT32 Offset,  
  GFL_CORDER ChannelOrder,  
  GFL_CTYPE ChannelType,  
  GFL_UINT16 PcdBase,  
  GFL_UINT16 EpsDpi,  
  GFL_INT32 EpsWidth,  
  GFL_INT32 EpsHeight,  
  GFL_READ_CALLBACK Read,  
  GFL_TELL_CALLBACK Tell,  
  GFL_SEEK_CALLBACK Seek
} GFL_LOAD_PARAMS


Код

typedef struct (
  GFL_BITMAP_TYPE Type,  
  GFL_ORIGIN Origin,  
  GFL_INT32 Width,  
  GFL_INT32 Height,  
  GFL_INT32 FormatIndex,  
  char FormatName[8],  
  char Description[64],  
  GFL_UINT16 Xdpi,  
  GFL_UINT16 Ydpi,  
  GFL_UINT16 BitsPerComponent,  
  GFL_UINT16 ComponentsPerPixel,  
  GFL_INT32 NumberOfImages,  
  GFL_UINT32 FileSize,  
  GFL_COLORMODEL ColorModel,  
  GFL_COMPRESSION Compression,  
  char CompressionDescription[64]
} GFL_LOAD_PARAMS


Короче, сие есть для меня пока труднопроходимый лес :(

Автор: Cinemaizer[Олег] 11.3.2010, 14:26
В какую сторону копать вроде бы нашел (маршалинг, Marshal.StructureToPtr - в нужную сторону смотрю? smile), но... все равно пока туго соображаю как стартовать... :(

Может подскажет кто (кодом имею ввиду..), как мне все эти указатели прописать?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)