SDL3 C#: SDL_DESTROYWINDOW () дает ошибку «Неверное окно», несмотря на действительное создание окнаC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 SDL3 C#: SDL_DESTROYWINDOW () дает ошибку «Неверное окно», несмотря на действительное создание окна

Сообщение Anonymous »

Я пишу программу для создания окна SDL3 в C#.
Я скомпилировал SDL3 2.30.5 из следующего репозитория: https://github.com/libsdl-org/sdl под win x64, используя Rider 2024.1.2. />

Код: Выделить всё

using SDL3;

namespace SDL3Test
{
class Program
{
private static bool _loop;

static void Main(string[] args)
{
if (SDL.Init(SDL.InitFlags.Video) < 0)
{
Console.WriteLine($"SDL could not initialize! SDL_Error: {SDL.GetError()}");
return;
}

var window = SDL.CreateWindow("SDL Create Window", 800, 600, SDL.WindowFlags.OpenGL);

if (window == IntPtr.Zero)
{
Console.WriteLine($"Window could not be created! SDL_Error: {SDL.GetError()}");
return;
}

_loop = true;

while (_loop)
{
while (SDL.PollEvent(out var sdlEvent) != 0)
{
if (sdlEvent == SDL.EventType.Quit)
{
_loop = false;
}
}
}

SDL.DestroyWindow(window);

Console.WriteLine($"SDL_Error: {SDL.GetError()}");

SDL.Quit();
}
}
}
< /code>
Вот функция CreateWindow: < /p>
[LibraryImport(SDLLibrary)]
[UnmanagedCallConv(CallConvs = new[] { typeof(System.Runtime.CompilerServices.CallConvCdecl) })]
private static unsafe partial IntPtr SDL_CreateWindow(byte* title, int w, int h, WindowFlags flags);

public static unsafe IntPtr CreateWindow(string? title, int w, int h, WindowFlags flags)
{
var utf8TitleBufSize = Utf8Size(title);
var utf8Title = stackalloc byte[utf8TitleBufSize];
return SDL_CreateWindow(Utf8Encode(title, utf8Title, utf8TitleBufSize), w, h, flags);
}
< /code>
и вот функция Drestomwindow: < /p>
[LibraryImport(SDLLibrary, EntryPoint = "SDL_DestroyWindow")]
[UnmanagedCallConv(CallConvs = new[] { typeof(System.Runtime.CompilerServices.CallConvCdecl) })]
public static unsafe partial void DestroyWindow(IntPtr window);
< /code>
Помощные функции: < /p>
private static int Utf8Size(string? str)
{
if (str == null)
{
return 0;
}
return str.Length * 4 + 1;
}

private static unsafe byte* Utf8Encode(string? str, byte* buffer, int bufferSize)
{
if (str == null)
{
return (byte*)0;
}
fixed (char* strPtr = str)
{
Encoding.UTF8.GetBytes(strPtr, str.Length + 1, buffer, bufferSize);
}
return buffer;
}

private static unsafe string? UTF8_ToManaged(IntPtr s, bool freePtr = false)
{
if (s == IntPtr.Zero) return null;

var ptr = (byte*)s;
while (*ptr != 0) ptr++;

var result = Encoding.UTF8.GetString((byte*)s, (int)(ptr - (byte*)s));

if (freePtr) Free(s);
return result;
}
Проблема в том, что когда я вызываю sdl.destroywindow (window);, я получаю ошибку sdl_error: неверное окно через geterror.
Что может вызвать эту проблему?

Подробнее здесь: https://stackoverflow.com/questions/787 ... d-window-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»