2016-08-08 54 views
0

Eine Follow-up zu: OpenGL4Net WM_PAINT does not exist?OpenGL4Net System.BadImageFormatException

Ich bin nach wie vor eng folgende: https://sourceforge.net/p/ogl4net/wiki/Tutorials

Das Programm, wie es derzeit steht:

using System; 
using System.Collections.Generic; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using OpenGL4NET; 

namespace pads2 
{ 
    class Program : Form 
    { 
     private const int WM_PAINT = 15; 
     RenderingContext rc; 

     static void Main(string[] args) 
     { 
      Program program = new Program(); 
      program.Init(); 
      Application.Run(program); 
     } 

     // required for open GL 
     void Init() 
     { 
      rc = RenderingContext.CreateContext(this); 
      SetStyle(ControlStyles.AllPaintingInWmPaint, true); 
     } 

     void Render() 
     { 
      gl.Clear(GL.COLOR_BUFFER_BIT); 

      // here is the right place to draw all your scene 

      rc.SwapBuffers(); 
     } 

     // change window size 
     protected override void OnSizeChanged(EventArgs e) 
     { 
      gl.Viewport(0, 0, ClientSize.Width, ClientSize.Height); 
      // projection matrix may also need adjusting 
     } 

     // required for open GL 
     protected override void WndProc(ref Message m) 
     { 
      switch (m.Msg) 
      { 
       case WM_PAINT: Render(); break; 
       default: base.WndProc(ref m); break; 
      } 
     } 
    } 
} 

Q: Unter der Voraussetzung, dass ich Wenn Sie das Tutorial richtig implementieren, was kann ich bei dem Fehler System.BadImageFormatException on line program.Init(); tun?

Zusätzlich:

Zusätzliche Informationen: Die Datei oder Assembly laden 'OpenGL4Net, Version = 4.3.37.24, Culture = neutral, PublicKeyToken = null' oder einem seiner Abhängigkeiten. Es wurde versucht, ein Programm mit dem falschen Format zu laden.

Dies aufgrund der Warnung sein könnte:

eine Diskrepanz zwischen der Prozessorarchitektur des Projektes Es war „MSIL“ und die Prozessorarchitektur der Referenz „OpenGL4Net“, "gebaut AMD64 ". Diese Nichtübereinstimmung kann Laufzeitfehler verursachen. Bitte beachten Sie, dass Sie die Zielprozessorarchitektur Ihres Projekts durch den Konfigurationsmanager ändern müssen, um die Prozessorarchitekturen zwischen Ihrem Projekt und Referenzen auszurichten, oder nehmen Sie eine Abhängigkeit von Referenzen mit einer Prozessorarchitektur, die der Zielprozessorarchitektur Ihres entspricht Projekt.

jedoch nach:

How do I fix the Visual Studio compile error, "mismatch between processor architecture"?

Dies sollte kein Problem sein. Es gibt nur die Option von (32 oder 64) Bit beim Herunterladen der OpenGL4Net DLL.

Da Microsoft Intermediate Language nicht mit einem Prozessor identisch ist, habe ich versucht, im Release-Modus statt im Debug-Modus zu laufen, aber das macht keinen Unterschied.

Antwort

1

Welche Build-Konfiguration verwenden Sie beim Kompilieren? Und welche Version von OpenGL4Net hast du heruntergeladen? Die 32 oder 64 Bit Version?

Versuchen Sie, die Build-Konfiguration so einzustellen, dass sie der beabsichtigten Ziel-CPU der referenzierten Assembly entspricht (also entweder 32 oder 64 Bit, abhängig vom Download von OpenGL4Net).

Siehe C# compiling for 32/64 bit, or for any cpu? für eine detaillierte Erklärung.

+0

Es war in "Debug" (nach "Freigabe" versucht) und "Any CPU". Ich habe gerade eine spezielle "64-Bit-CPU" in der Build-Konfiguration erstellt und es hat funktioniert! Es scheint, dass VS nicht auf den CPU-Typ voreingestellt ist, auf den Ihre CPU und Ihr Betriebssystem eingestellt sind. | Discworld - Sam Vimes - "Es war so eine Erleichterung, recht zu haben, obwohl du wusstest, dass du nur dort bist, indem du jeden möglichen Weg versucht hast, falsch zu liegen." – alan2here