C# 在接口中嵌套结构、接口和类 我实际上正在翻译一些C++代码(我对C代码几乎一无所知,而且从来没有真正使用过)。在C语言中,我不会发现自己做了这样的事情,因为它看起来有点奇怪,但是用C++中的代码设置的方式,我发现很难不这样做。诚然,我对编程一点都不太有经验,但在我这么做的时间里,我能够相当好地掌握这些概念 无论如何,这里是C++代码。它也在头文件中 \ifndef\u SPRITE\H_ #定义精灵_ #ifdef_uucplusplus 外部“C”{ #endif/*\uuu cplusplus*/ #ifndefnull #定义空((void*)0) #恩迪夫 类型定义结构{ 无符号字符*数据; 内伦; 整数宽度; 内部高度; }精灵形象; 类型定义结构{ 无符号字符b; 无符号字符g; 无符号字符r; 未使用的无符号字符; }小叶片; 类型定义结构{ 字符*文件名; 无符号整数图像; SpriteImage*图像; 无符号整数调色板大小; SpritePalette*调色板; }雪碧; 类型定义枚举{ /*开发人员错误*/ 塞乌·巴达格斯, /*sprite_new()错误*/ 塞乌坎托潘, Seu_无效, /*sprite_to_bmp()、sprite_to_bmp_file()和sprite_to_rgb()错误*/ SEU指数, /*精灵\u到\u bmp\u文件()错误*/ 你能写吗 }精神错乱; //倒车板和车身板的功能 spritepalete*get\u pal(spritepalete*palete,int palete\u len); /*打开精灵文件*/ 精灵*精灵打开(常量字符*fname,精灵错误*错误); Sprite*Sprite\u open\u from_data(常量无符号字符*数据、无符号整数大小、SpriteError*错误); /*更改雪碧的调色板*/ 无效更改调色板(精灵*精灵,常量字符*fname,精灵错误*错误); /*将精灵转换为内存中的位图文件*/ void*sprite\u to\u bmp(sprite*sprite,int i,int*size,SpriteError*错误); /*与sprite_to_bmp()类似,但将结果保存到文件中*/ int-sprite\u到\u-bmp\u文件(sprite*sprite,int-i,const-char*writeToFile,SpriteError*error); /*将精灵转换为原始RGB数据。行步长/间距为3*宽度*/ void*sprite\u to\u rgb(sprite*sprite,int i,int*size,SpriteError*error); /*释放精灵*指针*/ 无效的精灵(精灵*精灵); #ifdef_uucplusplus } #endif/*\uuu cplusplus*/ #endif/*_SPRITE_H_*/

C# 在接口中嵌套结构、接口和类 我实际上正在翻译一些C++代码(我对C代码几乎一无所知,而且从来没有真正使用过)。在C语言中,我不会发现自己做了这样的事情,因为它看起来有点奇怪,但是用C++中的代码设置的方式,我发现很难不这样做。诚然,我对编程一点都不太有经验,但在我这么做的时间里,我能够相当好地掌握这些概念 无论如何,这里是C++代码。它也在头文件中 \ifndef\u SPRITE\H_ #定义精灵_ #ifdef_uucplusplus 外部“C”{ #endif/*\uuu cplusplus*/ #ifndefnull #定义空((void*)0) #恩迪夫 类型定义结构{ 无符号字符*数据; 内伦; 整数宽度; 内部高度; }精灵形象; 类型定义结构{ 无符号字符b; 无符号字符g; 无符号字符r; 未使用的无符号字符; }小叶片; 类型定义结构{ 字符*文件名; 无符号整数图像; SpriteImage*图像; 无符号整数调色板大小; SpritePalette*调色板; }雪碧; 类型定义枚举{ /*开发人员错误*/ 塞乌·巴达格斯, /*sprite_new()错误*/ 塞乌坎托潘, Seu_无效, /*sprite_to_bmp()、sprite_to_bmp_file()和sprite_to_rgb()错误*/ SEU指数, /*精灵\u到\u bmp\u文件()错误*/ 你能写吗 }精神错乱; //倒车板和车身板的功能 spritepalete*get\u pal(spritepalete*palete,int palete\u len); /*打开精灵文件*/ 精灵*精灵打开(常量字符*fname,精灵错误*错误); Sprite*Sprite\u open\u from_data(常量无符号字符*数据、无符号整数大小、SpriteError*错误); /*更改雪碧的调色板*/ 无效更改调色板(精灵*精灵,常量字符*fname,精灵错误*错误); /*将精灵转换为内存中的位图文件*/ void*sprite\u to\u bmp(sprite*sprite,int i,int*size,SpriteError*错误); /*与sprite_to_bmp()类似,但将结果保存到文件中*/ int-sprite\u到\u-bmp\u文件(sprite*sprite,int-i,const-char*writeToFile,SpriteError*error); /*将精灵转换为原始RGB数据。行步长/间距为3*宽度*/ void*sprite\u to\u rgb(sprite*sprite,int i,int*size,SpriteError*error); /*释放精灵*指针*/ 无效的精灵(精灵*精灵); #ifdef_uucplusplus } #endif/*\uuu cplusplus*/ #endif/*_SPRITE_H_*/,c#,c++,code-translation,C#,C++,Code Translation,顺便问一下,有人知道这个“#”参考是怎么回事吗 我不知道这些指的是什么 这是C#: 我相信你可以把这些点连在一起。请记住,这显然不是我的代码,所以我对它不太了解。如果有人需要更多的材料,我很乐意在必要时提供 > P>您似乎试图将SooCeFrand项目从C++移植到C: 查看器不仅是用C++编写的,而且是基于.的。 我知道你的问题是把这个特殊的头文件从C++翻译成C语言,什么是最好的方法,但是我的观点是除非你对C++非常满意,并且愿意学习很多关于QT的知识,否则你在这个移植项目中的成功几率

顺便问一下,有人知道这个“#”参考是怎么回事吗

我不知道这些指的是什么

这是C#:


我相信你可以把这些点连在一起。请记住,这显然不是我的代码,所以我对它不太了解。如果有人需要更多的材料,我很乐意在必要时提供

> P>您似乎试图将SooCeFrand项目从C++移植到C:

查看器不仅是用C++编写的,而且是基于.</P>的。 我知道你的问题是把这个特殊的头文件从C++翻译成C语言,什么是最好的方法,但是我的观点是除非你对C++非常满意,并且愿意学习很多关于QT的知识,否则你在这个移植项目中的成功几率不是很好。这是一个<>强大工程>对于一个既有C++又有C语言的程序员。

但是,如果你仍然想做这件事,那么你应该采取的方法是创建一个大的<>代码> SpReutoLaby[/Cord>static类],并将你发现的所有C++函数都放进该类中:<代码>静态< /Calp> Cype方法。是的,您也可以把C++结构看作嵌套类。您不需要任何接口

它不需要是漂亮的C代码;您正试图逐字移植它,尽可能减少对它的损害。一旦它开始工作,你就可以重构它,使它以传统的C#风格更加面向对象。

有几点:
1) 还有一个问题是,您的类型不应位于接口内部
2) 指针应该在sprite类中转换为memeber,或者在SpriteImage结构中转换为数组

3) 除非它是一个微不足道的端口,否则如果不很好地理解这两种语言和要移植的代码,编写它将非常困难

。。。问题到底是什么?编译之前应用的部分是#s。您是将所有内容都转换为C#还是计划从C#调用/互操作C代码?对于互操作,您需要封送结构以保持相同的内存布局。如果你要纯c,你可以简化得更多。我要纯c。唯一的问题是我不太了解C++,我完全明白我在做什么。我的意思是,我大部分都能理解,但有太多像“宏”这样的东西我几乎不懂。我也看到了很多指针,不确定是否应该尝试在我的C#code中输入它们,或者找到一种不同的方法来引用它们,比如通过IntPtr对象。我还想知道在接口中添加嵌套类和结构是否有意义,这样当调用接口时,嵌套在接口中的类和结构将被使用。您是对的,先生。我觉得这是学习如何做的最好方法,你知道吗?节目,我是说。无论如何,我很感激你的建议。我会用头球射门。你认为我需要更多的头文件接口吗?我想,我只是在尽我最大的努力从一般公式的角度来思考。TBQH对于一个好的学习项目来说,这里的内容太多了,至少在最初的几年里,你应该一次专注于一种语言。当然,但问题是:我需要学习如何做到这一点。我所说的学习是指尽可能快地学习。我了解这些事情每天是如何运作的,我尽我所能地推动自己。对一些人来说,这听起来很可笑,但我相信我能做到。我只需要知道几件事就够了。我是说
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);


    }