0

Некоторые странные вещи случаются. Когда я компилирую свою программу в Dev-C++, она не дает мне никаких ошибок и компилирует чистую. Когда я положил его в Visual Studio, я получил много ошибок:Visual Studio 2013 - ошибки C++

Error 1 error C2371: 'MailRecipient' : redefinition; different basic types 
Error 2 error C3861: 'GetModuleFileName': identifier not found 
Error 3 error C2664: 'HRESULT SHGetFolderPathW(HWND,int,HANDLE,DWORD,LPWSTR)' : cannot convert argument 5 from 'char [260]' to 'LPWSTR' 
Error 4 error C3861: 'CopyFile': identifier not found 
Error 5 error C2664: 'BOOL SetFileAttributesW(LPCWSTR,DWORD)' : cannot convert argument 1 from 'char [512]' to 'LPCWSTR' 
Error 6 error C2664: 'HRESULT SHGetFolderPathW(HWND,int,HANDLE,DWORD,LPWSTR)' : cannot convert argument 5 from 'char [260]' to 'LPWSTR' 
Error 7 error C2664: 'BOOL SetFileAttributesW(LPCWSTR,DWORD)' : cannot convert argument 1 from 'char []' to 'LPCWSTR' 
Error 8 error C2664: 'LSTATUS RegOpenKeyExW(HKEY,LPCWSTR,DWORD,REGSAM,PHKEY)' : cannot convert argument 2 from 'const char [46]' to 'LPCWSTR' 
Error 9 error C2664: 'HRESULT SHGetFolderPathW(HWND,int,HANDLE,DWORD,LPWSTR)' : cannot convert argument 5 from 'char [260]' to 'LPWSTR' 
Error 10 error C2664: 'LSTATUS RegSetValueExW(HKEY,LPCWSTR,DWORD,DWORD,const BYTE *,DWORD)' : cannot convert argument 2 from 'const char [9]' to 'LPCWSTR' 

Это все работает на Dev-C++ Тхо. Мне нужно скомпилировать его в VS, потому что я хочу добавить что-то из библиотеки POCO, которая, по иронии судьбы, не компилируется в Dev-C++ ... Любая помощь?

+6

Не видя кода, который вызывает эти ошибки, не может действительно сказать. Но, по крайней мере, звучит так, как будто у вас проблемы с вашими типами символов и как код установлен для компиляции (Unicode vs. Multi-byte и т. Д.). – crashmstr

+0

@crashmstr. Я плохо разбираюсь в знаниях компиляторов ... могу ли я обойти эти ошибки без фактического изменения кода? – user3478487

+0

@ user3478487 Чтобы быть откровенным, это глупая идея. Ошибка компилятора означает, что код недействителен, почему вы хотите его обходить? – CoryKramer

ответ

2

Проект Visual Studio определяет UNICODE по умолчанию.

Вы можете либо отключить Unicode в настройках проекта или переделывают программу, чтобы использовать wchar_t строки (например, L"Blah" вместо "Blah") на основе.

Или, вы можете #undef UNICODE перед тем, как включить <windows.h>, везде.

+0

Я сделал это и он избавился от 3 ошибок. Еще 7 оставшихся :( – user3478487

+0

Я получил его для работы без ошибок, должен был создать новый проект! Спасибо! – user3478487

0

Кажется, что есть некоторые проблемы, связанные с утверждениями #include в вашем проекте. Вам нужно выяснить, почему MailRecipient получает новое определение. Возможно, вам придется настроить некоторые параметры проекта в Visual Studio.
Кроме того, поскольку первый ответ предполагает, что Visual Studio по умолчанию использует UNICODE, что заставляет его вызывать широкие строковые версии функций Windows API. Вы можете использовать функцию std :: widen, чтобы преобразовать ваши строки только для вызовов Windows API. Для получения дополнительной информации по этой теме см. utf8everywhere.org.

+0

Я перестроил свои #includes и добавил POCO. Я получаю только 2 ошибки для CopyFile и GetModuleFileName: идентификатор не – user3478487

+0

Добавлен и он работает. Nevermind :) Спасибо всем за помощь! – user3478487