После загрузки исходного кода для SdlDotNet для отладки в источник BadImageformatException, возникшего при загрузке шрифта, я обнаружил, что это происходит при попытке инициализировать систему шрифтов.Мое предположение относительно того, почему это происходило, заключалось в том, что где-то там еще работала какая-то 32-битная DLL, и все сборки .NET работали в 64-битном процессе.Поэтому я заставил сборки .NET самого высокого уровня ориентироваться на x86 вместо любого процессора.Для этого в Visual C # 2010 Express я открыл меню «Сборка», выбрал «Диспетчер конфигурации», выбрал «x86» в качестве платформы Active Solution и внес некоторые изменения в 3 проекта
- Physics2DDemo
- Physics2DDotNet
- Physics2DDotNet.Demo
(мне, вероятно, не нужно было менять все это, но изменение только Physics2DDemo, похоже, не сработало.потому что мне нужно было заново открыть решение и / или восстановить его более принудительно, но в итоге это сработало.) Вот изменения, которые я внес в каждый проект:
- В столбце платформы выберите «"
- Во всплывающем диалоговом окне выберите x86 в качестве новой платформы и выберите" Любой ЦП "в качестве источника для копирования.
- Установите флажок" Сборка ".
- Закройте окно Configuration Manager и откройте настройки проекта для этого отдельного проекта.
- На вкладке «Сборка» удалите «x86» из пути вывода, оставив только bin \ Debug.
Оглядываясь назад, я думаю, что должен был поставить флажок «Сборка» в каждом проекте, что могло бы уменьшить некоторые мои проблемы с синхронизацией версий DLL проекта.
Это помогло мне справиться с проблемой шрифта, но только с помощью пары строк кода. Затем произошел сбой при выполнении инициализатора типа для SurfaceGl. В этой строке произошел сбой:
static glLoadIndentityDelegate glLoadIdentity =
(glLoadIndentityDelegate)Marshal.GetDelegateForFunctionPointer(
Sdl.SDL_GL_GetProcAddress("glLoadIdentity"), typeof(glLoadIndentityDelegate));
Видимо SDL_GL_GetProcAddress возвращался0. Как оказалось, код, который я скачал для SdlDotNet, будучи несколько новее, чем код, поставляемый с Physics2D.Net, не работал с Physics2D.Net. Я заменил обновленный DLLs с оригинальными DLL, и теперь я могу скомпилировать и запустить демонстрацию Physics2D.NET!
Конечно, любой, кто хочет включить Physics2D.NET в чистый движок .NET, или тот, кто может для 64-битного процесса, вероятно, захочет создать цель решения AnyCPU вместо цели x86.И, возможно, стоит поменять все проекты в цели решения x86 на x86.
Я заметил, что теперь я могу переключать цели проекта так, чтобы Physics2DDemo была единственной сборкой проекта как x86.Остальные сборки, являющиеся DLL, будут загружаться в этот процесс так, как того пожелает этот процесс.Поэтому достаточно просто заставить эту сборку запустить 32-битный процесс.
Могут быть некоторые шаги, которые я здесь не упомянул.Я перезагружал решение и несколько раз принудительно перестраивал, чтобы Visual Studio выполняла повторную синхронизацию с новыми целевыми местоположениями, версиями и так далее.Но я думаю, что все это было из-за моего переключения версии SdlDotNet.Поэтому я надеюсь, что все это на самом деле не нужно.