怎样定义有大小的数组,如 int [] ia

海涵德 2014-05-07 10:24:15
怎样定义有大小的数组,如
int [] ia;
怎样明确的数组的大小,而不是通过实例解决
int [] ia=new int[10];
...全文
220 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
海涵德 2014-05-07
  • 打赏
  • 举报
回复
7楼的代码在Winform中,在silverlight中还是不行。
海涵德 2014-05-07
  • 打赏
  • 举报
回复
这是一段关于读取照片Exif的程序,在Winform中有很多代码实例。 Winform的代码我已经调试成功了,我本想迁移到Sliverlight中,但在Winform中引用的 using System.Drawing; 在Silverlight中由于安全策略的原因不支持这个引用。 这时我找到这段代码,在cpp项目中调试成功了,想仿照这段代码过最原始读取文件字节的方式完成,这段代码正好可以。
佛火 2014-05-07
  • 打赏
  • 举报
回复
部分示例:

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    public struct ExifInfoType
    {
        //char  CameraMake   [32];
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
        public StringBuilder CameraMake;

        //int  DateTimeOffsets[MAX_DATE_COPIES];
        const int MAX_DATE_COPIES = 100; //sample value
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_DATE_COPIES)]
        public int[] DateTimeOffsets;
    }
更多用法 ,请参见: Marshaling Data with Platform Invoke http://msdn.microsoft.com/en-us/library/fzhhdwae(v=vs.100).aspx
海涵德 2014-05-07
  • 打赏
  • 举报
回复
2楼的没有通过编译 错误 1 不安全代码只会在使用 /unsafe 编译的情况下出现 E:\DevApp\VisualStudio.NET2010.App\Silverlight4\WCFServices\madaming\madamingExif4Silverlight\MainPage.xaml.cs 54 43 madamingExif4Silverlight
threenewbee 2014-05-07
  • 打赏
  • 举报
回复
试试看加上 [MarshalAs(UnmanagedType.LPArray, SizeConst=大小)]
宝_爸 2014-05-07
  • 打赏
  • 举报
回复
看的不太明白啊。 int [] ia;只是一个空指针,这时候没法指定数组长度。 int [] ia=new int[10]; 指向一个有10个item的数组。这时候才能制定长度 如果你需要int[]作为函数的参数,可以在函数中使用Length检查数组长度。
海涵德 2014-05-07
  • 打赏
  • 举报
回复
谢谢指点 我想把cpp、中的结构改写成c#
typedef struct {
    char  CameraMake   [32];
    char  CameraModel  [40];
    char  DateTime     [20];
    int   Height, Width;
    int   Orientation;
    int   IsColor;
    int   Process;
    int   FlashUsed;
    float FocalLength;
    float ExposureTime;
    float ApertureFNumber;
    float Distance;
    float CCDWidth;
    float ExposureBias;
    float DigitalZoomRatio;
    int   FocalLength35mmEquiv; // Exif 2.2 tag - usually not present.
    int   Whitebalance;
    int   MeteringMode;
    int   ExposureProgram;
    int   ExposureMode;
    int   ISOequivalent;
    int   LightSource;
    char  Comments[MAX_COMMENT];

    unsigned ThumbnailOffset;          // Exif offset to thumbnail
    unsigned ThumbnailSize;            // Size of thumbnail.
    unsigned LargestExifOffset;        // Last exif data referenced (to check if thumbnail is at end)

    char  ThumbnailAtEnd;              // Exif header ends with the thumbnail
                                       // (we can only modify the thumbnail if its at the end)
    int   ThumbnailSizeOffset;

    int  DateTimeOffsets[MAX_DATE_COPIES];
    int  numDateTimeTags;

    int GpsInfoPresent;
    char GpsLat[31];
    char GpsLong[31];
    char GpsAlt[20];
} ExifInfo_t;
/////////////////////
  struct ExifInfoType
        {
            char[]  CameraMake=new char [32];//[32]
            char[] CameraModel = new char[40];
            char[] DateTime = new char[20];

            int   Height, Width;
            int   Orientation;
            int   IsColor;
            int   Process;
            int   FlashUsed;
            float FocalLength;
            float ExposureTime;
            float ApertureFNumber;
            float Distance;
            float CCDWidth;
            float ExposureBias;
            float DigitalZoomRatio;
            int   FocalLength35mmEquiv; // Exif 2.2 tag - usually not present.
            int   Whitebalance;
            int   MeteringMode;
            int   ExposureProgram;
            int   ExposureMode;
            int   ISOequivalent;
            int   LightSource;
            char [] Comments=new  char   [MAX_COMMENT];
            

            UInt16 ThumbnailOffset;  //    unsigned ThumbnailOffset;          // Exif offset to thumbnail
            

    UInt16 ThumbnailSize;//   unsigned ThumbnailSize;            // Size of thumbnail.
    UInt16  LargestExifOffset; // unsigned LargestExifOffset;        // Last exif data referenced (to check if thumbnail is at end)

    char  ThumbnailAtEnd;              // Exif header ends with the thumbnail
                                       // (we can only modify the thumbnail if its at the end)
    int   ThumbnailSizeOffset;

    int[]  DateTimeOffsets=new int  [MAX_DATE_COPIES];
    int  numDateTimeTags;

    int  GpsInfoPresent;
    char[]  GpsLat=new char [31];
    char[]  GpsLong=new char [31];
    char[]  GpsAlt=new char [20];
} ;
出现的问题,请帮助解决。
佛火 2014-05-07
  • 打赏
  • 举报
回复
c# 目前只能在unsafe结构体成员中显示指定数组大小。 比如: public struct MyStructure { unsafe public fixed int FixedSizeArray[100]; }
祥子爱游戏 2014-05-07
  • 打赏
  • 举报
回复
List ArrayList?
海涵德 2014-05-07
  • 打赏
  • 举报
回复
7楼的解答在Silverlight项目中编译过去了。

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧