Перейти к содержанию

Проблема С Компиляцией C++


Рекомендуемые сообщения

В результате компиляции в Visual C++, пишет ошибку

1>C:\Program Files\Microsoft SDK (2010)\Include\objidl.h(11280): error C2061: синтаксическая ошибка: идентификатор "__RPC__out_xcount_part"

Вот сам кусок код из-за которого происходит ошибка:


virtual HRESULT STDMETHODCALLTYPE Finish_Pull(
__RPC__out_xcount_part(cRequest, *pcReturned) BYTE *buf,
__RPC__out ULONG *pcReturned) = 0;

Переустанавливал DirectX SDK на версии 2006, 2009, 2010 года, результат тот же.

Что делать?

Ссылка на комментарий
Поделиться на другие сайты

Прежде всего надо подразумевать, что эта ошибка была не только у тебя, но и других людей. А значит этот вопрос могли задать люди столкнувшиеся с этой проблемой и освещение его могло быть внесено в реестр поисковых систем.

Короче можешь задать вопрос гуглу:

objidl.h Error C2061
Ссылка на комментарий
Поделиться на другие сайты

Искал по гуглу, в большинстве случаев сказано либо переустановить DiretX SDK на более новую версию, либо посмотреть правильность пути lib, и include в свойствах проекта.Но у меня стоит SDK 2010 года, пути в порядке проверял не раз.

Ссылка на комментарий
Поделиться на другие сайты

Я так понял что происходит конфликт файлов из SDK Directx и Windows

C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)

C:\Program Files (x86)\Microsoft SDKs

по расположению путей, который выше и который ниже в настройках VS. Что делать по этому поводу написано ниже из цитаты

If the DirectX SDK was installed after the Windows SDK, the DirectX \include directory will come before the Windows SDK \include directory in your PATH. This means that Visual Studio will be build with the version of objidl.h that ships in the DirectX SDK. You must build with the version of objidl.h that ships in the Windows 7 SDK.

Please look at your VC++ Directory Settings in VS and see if the Windows SDK include path (C:\Program Files\Microsoft SDKs\Windows\v7.0\Include) is at the top of the list. This will make Visual Studio use the SDK resources first. You should also change the settings for the Executable and Library directories, so that the Windows SDK directories are at the top.

To change the directories, in Visual Studio IDE, go to Tools, Options, Projects and Solutions, VC++ Directories.

--Karin

Ссылка на комментарий
Поделиться на другие сайты

Спасибо, разобрался.

Но теперь выскакивает ошибка:


error LNK2019: ссылка на неразрешенный внешний символ _D3DXCreateLine@8 в функции "public: virtual long __stdcall hkIDirect3DDevice9::EndScene(void)" (?EndScene@hkIDirect3DDevice9@@UAGJXZ)

вот сам код:


HRESULT APIENTRY hkIDirect3DDevice9::EndScene()
{
if(GetAsyncKeyState( VK_NUMPAD1 ) &1 )
{
bZr = !bZr;
}
if(GetAsyncKeyState( VK_NUMPAD2 ) &1 )
{
bZr1 = !bZr1;
}
if(GetAsyncKeyState( VK_NUMPAD3 &1 )
){
bXhair = !bXhair;
if(pLine == NULL)
D3DXCreateLine( m_pD3Ddev , &pLine);
pLine->SetWidth(1.0);
pLine->SetAntialias(true);
pLine->SetGLLines(true);
}

Мне кажется что ошибка выскакивает из-за этой строки:


D3DXCreateLine( m_pD3Ddev , &pLine);

Что не так?

Ссылка на комментарий
Поделиться на другие сайты

Прицел

так нужно?

весь код:


HRESULT APIENTRY hkIDirect3DDevice9::EndScene()
{
if(GetAsyncKeyState( VK_NUMPAD1 ) &1 )
{
bZr = !bZr;
}
if(GetAsyncKeyState( VK_NUMPAD2 ) &1 )
{
bZr1 = !bZr1;
}
if(GetAsyncKeyState( VK_NUMPAD3 &1 )
){
Xhair = !bXhair;
if(pLine == NULL)
D3DXCreateLine( m_pD3Ddev , &pLine);
pLine->SetWidth(1.0);
pLine->SetAntialias(true);
pLine->SetGLLines(true);
if (bXhair)
{
pLine->Begin();
pLine->Draw(CrosshairX, 2, D3DCOLOR_RGBA(255, 0, 255, 255));
pLine->End();
pLine->Begin();
pLine->Draw(CrosshairY, 2, D3DCOLOR_RGBA(255, 0, 255, 255));
pLine->End();
}
return m_pD3Ddev->EndScene();
}

Ссылка на комментарий
Поделиться на другие сайты

ссылка на неразрешенный внешний символ

Это однозначный намек на то, что не подключена какая-то либа, которая нужна для компиляции.

Для компиляции с этой функцией нужно добавить либу D3dx9.lib

Ссылка на комментарий
Поделиться на другие сайты

Я так делал.


float ScreenCenterX = 0.0f;
float ScreenCenterY = 0.0f;

//EndScene
...
...
if(g_pLine == NULL) D3DXCreateLine(pDevice, &g_pLine);
pDevice->GetViewport(&g_ViewPort);

ScreenCenterX = (float)g_ViewPort.Width / 2;
ScreenCenterY = (float)g_ViewPort.Height / 2;

if (Xhair)
{
D3DRECT rec2 = {(long)ScreenCenterX-20, (long)ScreenCenterY, (long)ScreenCenterX+20, (long)ScreenCenterY+1};
D3DRECT rec3 = {(long)ScreenCenterX, (long)ScreenCenterY-20, (long)ScreenCenterX+1, (long)ScreenCenterY+20};
pDevice->Clear((long)1, &rec2, D3DCLEAR_TARGET,colWhite, (long)0, (long)0);
pDevice->Clear((long)1, &rec3, D3DCLEAR_TARGET,colWhite, (long)0, (long)0);
}

if(GetAsyncKeyState(VK_NUMPAD3)&1){Xhair=!Xhair;}

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.