Если ты пробовал и у тебя получалось выложи пример. У меня не получается. Я писал программы с использованием DirectX и OpenGL - все прет.(Подключаемые файлы состовлял сам) А с PhysX нефига не получается.
Ну вообще там всё сделано через интерфейсы, в импорте всего несколько функций. NxCreatePhysicsSDK создаёт основной объект, а далее через него создаются все остальные. Писать inc файлы меня что-то не вставляет, да и не зачем мне оно, прекрасно обхожусь C++. А так возможно что-то забыл в интерфейсе написать, вот и не работает.
В интерфейсах все правильно должно быть, т.к. я по SDK их составлял и в HELPе смотрел, все есть. Дело даже не в интерфейсах, я обычную функцию(NxCreatePhysicsSDK) по созданию физики не могу инициализировать. INC-файлы все-то ведь необязательно писать, напиши только те которые будешь использовать. Попробуй на ASM написать простейшее приложение. А в C++ и у меня все без проблем идет.
Может у тебя эта трабла: Не создается объект NxPhysicsSDK. Хотя если пишешь, что в С++ всё работает?! Или версию не ту подсовываешь.
По идее ни в том и ни втом случае проблем быть не должно! Т.к на C++ все нормально компилеться и запускаеться. Все примеры в комплекте с SDK тоже нормально копилирубтся и запускаются. Код (Text): invoke NxCreatePhysicsSDK,NX_PHYSICS_SDK_VERSION,0,0,desc,[errorCode] Вот функция, но она всегда возвращает NULL! В чем причина не могу понять.
Как я поставлю поменьше? Код (Text): invoke NxCreatePhysicsSDK,[b]NX_PHYSICS_SDK_VERSION[/b],0,0,desc,[errorCode]
PodonOK напиши на с++, на асме открой в ольге и сравни, какой то параметр должно быть ложиться в стек не так как ты думаешь
У меня работает. Код (Text): .386P .MODEL FLAT, STDCALL EXTERN MessageBoxA@16:NEAR EXTERN ExitProcess@4:NEAR EXTERN NxCreatePhysicsSDK:NEAR INCLUDELIB d:\masm32\lib\user32.lib INCLUDELIB d:\masm32\lib\kernel32.lib INCLUDELIB d:\masm32\lib\shell32.lib INCLUDELIB "E:\Coding\AGEIA PhysX SDK\v2.7.0\SDKs\lib\win32\PhysXLoader.lib " ;----------------------------------------------- _DESK STRUCT hwPageSize DD ?; hwPageMax DD ?; hwConvexMax DD ?; flags DD ?; _DESK ENDS _DATA SEGMENT DWORD PUBLIC USE32 'DATA' desk _DESK <?> _DATA ENDS _TEXT SEGMENT DWORD PUBLIC USE32 'CODE' START: MOV desk.hwPageSize, 65536 MOV desk.hwPageMax, 256 MOV desk.hwConvexMax, 2048 MOV desk.flags, 0 PUSH 0 PUSH OFFSET desk PUSH 0 PUSH 0 PUSH 02070000H CALL NxCreatePhysicsSDK TEST EAX, EAX JE _exit PUSH 0 PUSH 0 PUSH 0 PUSH 0 CALL MessageBoxA@16 _exit: PUSH 1 CALL ExitProcess@4 _TEXT ENDS END START MessageBox показывается.
Нашел причину в "NxPhysicsSDKDesc" - немного не то понаписал там. После исправления все запустилось. Благодарю за помощь.
Был в в местах нестоль отдаленных, поэтому не мог продолжить тему с проблеммой PhysX на ASM. Я нашел в чем еще одна причина ошибки, но т.к. не являюсь специалистом и даже программистом, не могу понять что там и зачем. А проблемка заключается вот в чем: я просмотрел ASM-листинг програмки написанной мной на C++ и нашел, что в процедуре, где инициализируется PhysX что-то записывается в DWORD PTR FS:0 и в конце процедуры перезаписывается - ЗАЧЕМ это и что туда записывается?