Autor Wątek: xnamath i dziwne crashe  (Przeczytany 2611 razy)

Offline gunstar

  • Użytkownik

# Kwiecień 04, 2010, 21:42:53
Piszę sobie DLL'ke frameworku z Directx 11 używając Xnamath i napotkałem na pewien dziwny problem. W każdym miejscu w którym użyje operatora przypisania żeby skopiować jeden obiekt (np. wektor) do drugiego wchodzącego w skład klasy następuje crash. Wywala po prostu w danym miejscu "Access violation reading location 0xffffffff".

Żeby jeszcze bardziej udziwnić sprawę - wszystko działa jeśli odpalę aplikacje z projektu DLL'ki (poprzez wskazanie exe'ka). Crashuje jeśli odpalę ją z projektu aplikacji lub po prostu z explorera.

Przykładowy kod:
Kod: (cpp) [Zaznacz]
CCamera::CCamera()
{
XMMATRIX Projection;
m_Projection = Projection; // crash!

XMMATRIX View = XMMatrixIdentity(); // tu dziala, zawartosc macierzy poprawna
m_View = View; // crash!

XMVECTOR Position = XMVectorSet(x, y, z, 0.0f); // tu tez dziala, jw.
m_Position = Position; // crash!

m_Right = XMVectorSet(1.0f, 0.0f, 0.0f, 0.0f); // crash!
m_View = XMMatrixIdentity(); // crash!
}

Skończyły mi się pomysły. Robiłem wcześniej to samo pod Directx 9 z użyciem D3DX i wszystko śmigało. Porównywałem też ustawienia obu projektów aplikacji i DLL'ki ale nie mogłem nic konkretnego znaleźć.

Google wywala same linki związane z biblioteka matematyczna z XNA. Halp?

EDIT (jeszcze podczas pisania topiku):

Próbowałem cala klasę skopiować z projektu DLL'ki do projektu aplikacji (bez exportowania do liba) i jest dalej to samo.

Tworzenie obiektu
Kod: (cpp) [Zaznacz]
CCamera Camera;zamiast wcześniej przez new
Kod: (cpp) [Zaznacz]
CCamera* Camera = new CCamera();naprawia problem. Tylko żadne to dla mnie rozwiązanie i nadal nie wiem czemu tak się dzieje. ???

Widać że strasznie namieszałem, nie zdziwię się jeśli topik zniknie pusty w otchłaniach internetu. Jestem trochę zdesperowany... ;/
« Ostatnia zmiana: Kwiecień 04, 2010, 22:17:05 wysłana przez gunstar »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline kombain

  • Użytkownik

# Kwiecień 04, 2010, 22:07:27

Offline gunstar

  • Użytkownik

# Kwiecień 04, 2010, 22:23:47
Może http://forums.xna.com/forums/p/27931/157006.aspx?

Wielkie dzięki! Chodziło własnie o to. Obie struktury XMVECTOR i XMMATRIX używają typu __m128 który musi być wyrównany do 16 bajtów. Jak dla mnie za dużo z tym zabawy. Użyje po prostu (tak jak napisał ktoś z tamtego topiku) XMFLOAT4 i XMFLOAT4X4 jako pola klasy a do obliczeń zostawię XMVECTOR/XMMATRIX.

Jeszcze raz dziekuje! :)

PS: Znalazłem jeszcze innym topik w którym problem jest dokładniej wytłumaczony - http://ompf.org/forum/viewtopic.php?f=17&t=1131 .