long double dValue = Edit->Text.ToDouble(); //25,5679
char lpBuf[120];
char * lpMask="%.9Lf";
int len;
// преобразуем и пишем в Label
LE_FtS_DO->Text = FloatToStr(dValue); // 25,5679
// преобразуем
sprintf(lpBuf,lpMask,dValue); // 25.567900000
// пишем в Label
LE_sp_DO->Text = lpBuf;
if( NULL == ( g_pD3D = _Direct3DCreate9( D3D_SDK_VERSION ) ) )
{
Text = "E_FAIL _Direct3DCreate9";
return;// ;
}
// Создание структуры необходимой для инициализации D3DDevice.
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, Handle,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice ) ) )
{ Text = "E_FAIL CreateDevice"; return; }
g_pd3dDevice->Release();
g_pd3dDevice = NULL;
g_pD3D->Release();
g_pD3D = NULL;
// преобразуем и пишем в Label
LE_FtS->Text = FloatToStr(dValue); // 25,5679007993889
// преобразуем
sprintf(lpBuf,lpMask,dValue); // 25.567899648
// пишем в Label
LE_sp->Text = lpBuf;
DX 9.0 + CreateDevice + sprintf/FloatToStr
Еще раз освещаю проблему.
Работаю в C++Builder 6.0, WindowsXP SP2, Directx 9.0C. DX SDK апрельский(2005).
Проблема: после вызова CreateDevice нарушается нормальная работа sprintf(...) и Sysutils::FloatToTex(...).
т.е:
для FloatToTex
до вызова 25,5679 -> 25,5679
после 25,5679 -> 25,5679007993889
для sprintf c маской "%.9Lf"
до вызова 25,5679 -> 25.567900000
после 25,5679 -> 25.567899648
Пример привел ниже.
Код:
Часть DirectX работает без проблем, а пребразование double в строку плывет...
Думаю, что некорректно заданы параметры для CreateDevice или члены структуры d3dpp.
"Что делать?"
Возможно были изменены настройки сопроцессора.
Цитата:
Возможно были изменены настройки сопроцессора.
А какие настройки сопроцессора на это влияют?
Вполне возможно, VS это VS, а CBuilder это совсем другое...
насколько я помню влияют на сопроцессор такие функции: _contol87 _controlfp Set8087CW ...