實際上,我正在將一些C++代碼(我對此知之甚少,從未真正使用過)轉換爲C#。通常在C#中,我不會發現自己在做這樣的事情,因爲它看起來有點奇怪,但隨着C++代碼的安裝,我發現很難不這樣做。無可否認,我對編程不是很有經驗,但是我一直在做這件事,我已經能夠很好地把握這些概念。接口中的嵌套結構,接口和類
無論如何,這裏是C++代碼。它也在頭文件中。
#ifndef _SPRITE_H_
#define _SPRITE_H_
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#ifndef NULL
#define NULL ((void *) 0)
#endif
typedef struct {
unsigned char *data;
int len;
int width;
int height;
} SpriteImage;
typedef struct {
unsigned char b;
unsigned char g;
unsigned char r;
unsigned char unused;
} SpritePalette;
typedef struct {
char *filename;
unsigned int nimages;
SpriteImage *images;
unsigned int palette_size;
SpritePalette *palette;
} Sprite;
typedef enum {
/* Developer errors */
SE_BADARGS,
/* sprite_new() errors */
SE_CANTOPEN,
SE_INVALID,
/* sprite_to_bmp(), sprite_to_bmp_file() and sprite_to_rgb() errors */
SE_INDEX,
/* sprite_to_bmp_file() errors */
SE_CANTWRITE
} SpriteError;
//Funcion para hacer uso de reverse_palette desde el exterior
SpritePalette * get_pal(SpritePalette *palette,int palette_len);
/* Open sprite file */
Sprite *sprite_open (const char *fname, SpriteError *error);
Sprite *sprite_open_from_data (const unsigned char *data, unsigned int size, SpriteError *error);
/* Change palette of sprite*/
void change_palete(Sprite *sprite, const char *fname, SpriteError *error);
/* Converts a sprite to bitmap file in memory */
void *sprite_to_bmp (Sprite *sprite, int i, int *size, SpriteError *error);
/* Like sprite_to_bmp(), but saves the result to a file */
int sprite_to_bmp_file (Sprite *sprite, int i, const char *writeToFile, SpriteError *error);
/* Converts a sprite to raw RGB data. The rowstride/pitch is 3*width. */
void *sprite_to_rgb (Sprite *sprite, int i, int *size, SpriteError *error);
/* Frees a Sprite* pointer */
void sprite_free (Sprite *sprite);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* _SPRITE_H_ */
順便說一句,沒有人知道交易與'#'參考是什麼?
我不知道這些指的是什麼。
而這裏的C#:
interface Sprite
{
public class SpriteImage
{
private byte *data;
private int length;
private int width;
private int height;
}
public class SpritePalette
{
byte b;
byte g;
byte r;
byte unused;
}
public class Sprite
{
string fileName;
uint nImages;
uint palette_size;
SpriteImage image;
SpritePalette palette;
}
public enum SpriteErrors
{
None, //--default value
BadArguments, //--dev errors
/*--errors derived from any instance/call of the NewSprite() method */
CantOpen,
Invalid,
/*SpriteToBMP(), SpriteToBMPFile(), and SpriteToRGB() errors*/
Index,
CantWrite //--SpriteToBMPFile() errors
}
public interface ISprite
{
SpritePalette GetPalette(SpritePalette palette, int paletteLength);
Sprite SpriteOpen(string firstName, SpriteErrors* error);
Sprite SpriteOpenFromData(byte* data, uint size, SpriteErrors* error);
}
我敢肯定,你可以在這裏連接點。請記住,這不是我的代碼,顯然,所以我對此不甚瞭解。如果任何人需要更多的材料,但我很樂意提供它,如果有必要。
那麼......究竟是什麼問題? – Ryan 2011-05-22 02:15:16
#是[預處理器指令](http://msdn.microsoft.com/zh-cn/library/3sxhs2ty(v = vs80).aspx)的一部分,它們在編譯前應用。 – jonsca 2011-05-22 02:23:09
您是否將所有內容翻譯爲C#或者您打算從C#調用/處理C代碼?對於互操作你需要編組你的結構來保持相同的內存佈局。如果你打算使用純C#,你可以簡化更多。 – hsmiths 2011-05-22 02:39:43