Устранение исключения typeload в C#

#windows-mobile-6.5

#windows-mobile-6.5

Вопрос:

В моем приложении для Windows Mobile 6.5 я пытаюсь создать эскиз, используя метод.Но при вызове этого метода я получаю исключение typtload.

Кто-нибудь, пожалуйста, дайте мне знать, как я могу это решить.Ниже вставлен мой код.

 using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Newtonsoft.Json.Linq;
using System.Runtime.Serialization;
using System.Reflection;
using System.IO;
using System.Net;
using Microsoft.WindowsMobile.Forms;
using System.Diagnostics;
using DirectShowLib;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;

namespace MyAppl
{  
  public partial class HomeForm : Form
    {

       public HomeForm()
        {
            InitializeComponent();
        }


        public class GetCamera
        {
            public static String videoFilePath;
            public static Bitmap myBitmap;

            CameraCaptureDialog ccd = new CameraCaptureDialog();

            public void getCameraDialogue()
            {
                ccd.Mode = CameraCaptureMode.VideoWithAudio;
                ccd.StillQuality = CameraCaptureStillQuality.Low;
                ccd.Title = "sweet";
                ccd.VideoTimeLimit = TimeSpan.FromMinutes(60);
                DialogResult dlgResult = ccd.ShowDialog();

                if (dlgResult == DialogResult.OK)
                {
                    videoFilePath = ccd.FileName;
                }
            }

            public void MyThumb(String path)
            {
                IGraphBuilder graphbuilder = (IGraphBuilder)new FilterGraph();
                ISampleGrabber samplegrabber = (ISampleGrabber)new SampleGrabber();
                graphbuilder.AddFilter((IBaseFilter)samplegrabber, "samplegrabber");

                AMMediaType mt = new AMMediaType();
                mt.majorType = MediaType.Video;
                mt.subType = MediaSubType.RGB24;
                mt.formatType = FormatType.VideoInfo;
                samplegrabber.SetMediaType(mt);
                int hr = graphbuilder.RenderFile(path, null);

                IMediaEventEx mediaEvt = (IMediaEventEx)graphbuilder;
                IMediaSeeking mediaSeek = (IMediaSeeking)graphbuilder;
                IMediaControl mediaCtrl = (IMediaControl)graphbuilder;
                IBasicAudio basicAudio = (IBasicAudio)graphbuilder;
                IVideoWindow videoWin = (IVideoWindow)graphbuilder;

                basicAudio.put_Volume(-10000);
                videoWin.put_AutoShow(OABool.False);

                samplegrabber.SetOneShot(true);
                samplegrabber.SetBufferSamples(true);

                long d = 0;
                mediaSeek.GetDuration(out d);
                long numSecs = d / 10000000;

                long secondstocapture = (long)(numSecs * 0.10f);


                DsLong rtStart, rtStop;
                rtStart = new DsLong(secondstocapture * 10000000);
                rtStop = rtStart;
                mediaSeek.SetPositions(rtStart, AMSeekingSeekingFlags.AbsolutePositioning, rtStop, AMSeekingSeekingFlags.AbsolutePositioning);

                mediaCtrl.Run();
                EventCode evcode;
                mediaEvt.WaitForCompletion(-1, out evcode);

                VideoInfoHeader videoheader = new VideoInfoHeader();
                AMMediaType grab = new AMMediaType();
                samplegrabber.GetConnectedMediaType(grab);
                videoheader = (VideoInfoHeader)Marshal.PtrToStructure(grab.formatPtr,
                typeof(VideoInfoHeader));


                int width = videoheader.SrcRect.right;
                int height = videoheader.SrcRect.bottom;
                Bitmap b = new Bitmap(width, height, PixelFormat.Format24bppRgb);

                uint bytesPerPixel = (uint)(24 >> 3);
                uint extraBytes = ((uint)width * bytesPerPixel) % 4;
                uint adjustedLineSize = bytesPerPixel * ((uint)width   extraBytes);
                uint sizeOfImageData = (uint)(height) * adjustedLineSize;


                System.Drawing.Imaging.BitmapData bd1 = b.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
                int bufsize = (int)sizeOfImageData;
                int n = samplegrabber.GetCurrentBuffer(ref bufsize, bd1.Scan0);
                b.UnlockBits(bd1);
                //         b.RotateFlip(RotateFlipType.RotateNoneFlipY);
                //        b.Save("C:\aaa\out.bmp");
                Marshal.ReleaseComObject(graphbuilder);
                Marshal.ReleaseComObject(samplegrabber);


                // return b;

            }

        }

        private void pbRecord_Click(object sender, EventArgs e)
        {

            GetCamera camera = new GetCamera();
            camera.getCameraDialogue();

            if (GetCamera.videoFilePath != null)
            {
                camera.MyThumb(GetCamera.videoFilePath);
            }

        }

         }
}
  

Получение исключения Typeloadexception в строке camera.MyThumb(getCamera.videoFilePath);

Пожалуйста, перешлите ваши ценные предложения.

Заранее спасибо 🙂

Ответ №1:

возможно, статические переменные не инициализируются вовремя

включите эту строку в свой код:

 static GetCamera() {}
  

Комментарии:

1. Это не работает. Я пытался даже удалить параметр, но результат тот же. Даже при запуске нового проекта проблема снова существует. Пожалуйста, дайте мне знать, если будут какие-либо предложения