Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > DirectX SDK C# (LoaderLock was detected)


Автор: LEVON 8.4.2008, 20:12
Всем привет!!

Надеюсь вы в мне поможете со следующим!!

Начал писать дипломный проект на С# з использованием 3д графики, а в частности с использованием DirectX.

Пишу на VS 2005. Поставил DirectX Software Development Kit (Version: 9.22.1284).

залил пример жаркова, который должен вывести пустую форму, без объектов, но просто инициирует графику. но выскакивает ошибка вроде


DLL 'C:\WINDOWS\assembly\GAC\Microsoft.DirectX\1.0.2902.0__31bf3856ad364e35\Microsoft.DirectX.dll' is attempting managed execution inside OS Loader lock. Do not attempt to run managed code inside a DllMain or image initialization function since doing so can cause the application to hang.


http://ipicture.ru/Gallery/Viewfull/1264637.html


код С# (Form1.cs)
Код


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

namespace DirectX_n1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            using(Form1 myForm1 = new Form1())
            {
                if(!myForm1.InitializeDirectX())
                {
                    MessageBox.Show("Pomulka inicializacii DirectX");
                    return;
                }
                myForm1.Show();
                while(myForm1.Created)
                {
                    myForm1.myRendering();
                    Application.DoEvents();
                }
            }
        }
        
        private void button3_Click(object sender, EventArgs e)
        {
            Close();
        }

        Device myDevice = null;
        public bool InitializeDirectX()
        {
            try
            {
                PresentParameters myPP = new PresentParameters();
                myPP.Windowed = true;
                myPP.SwapEffect = SwapEffect.Discard;
                myDevice = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, myPP);
                return true;
            }
            catch(DirectXException)
            {
                return false;
            }
        }

        public void myRendering()
        {
            if (myDevice == null) return;
            myDevice.Clear(ClearFlags.Target, System.Drawing.Color.White, 1.0f, 0);
            myDevice.BeginScene();
            myDevice.EndScene();
            myDevice.Present();
        }
    }
}



Код С# (Program.cs)
Код


using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace DirectX_n1
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            /*Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());*/
            using (Form1 myForm1 = new Form1())
            {
                if (!myForm1.InitializeDirectX())
                {
                    MessageBox.Show("Pomulka inicializacii DirectX");
                    return;
                }
                myForm1.Show();
                while (myForm1.Created)
                {
                    myForm1.myRendering();
                    Application.DoEvents();
                }
            }
        }
    }
}



Подскажите пожалуйста, мож чето не то поставил, или мож чото кроме установки надо ещо и вручную в шарпе чото прописать. 

Автор: vponomarov 8.4.2008, 23:06
LEVON, в режиме дэбага такая ошибка вылетает?
если да, то это нормально.
в Visual Studio отключается так: меню Debug\Exceptions\Managed Debug Assistants\Loader lock снимаешь галочку с Thrown

Автор: LEVON 8.4.2008, 23:38
Большое спасибо vponomarov   smile  smile . Такие мелкие ошибки наверное будут еще не раз меня мучить  smile , так как програмировал до єтого под веб.

П. С. Думаю у меня еще много будет похожих вопросов. мож скинет кто нить свою аську в приват или чени такое. что бы я мог задавать вопросы (ну я имею ввиду мелкие, которые не нуждаються обсуждения на форуме). Буду сильно благодарен  smile 


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