HydrogenAudio

Hosted Forums => foobar2000 => Development - (fb2k) => Topic started by: Peter on 2015-02-17 12:32:47

Title: Visual Studio 2013-2017 compatibility notice
Post by: Peter on 2015-02-17 12:32:47
Tested VS versions:
[VS2013] 12.0.31101.00 Update 4
[VS2015] 14.0.22310.1 DP
[VS2017] 15.0.0+26288.10

A bug in recent Visual Studio compiler is preventing correct compilation of certain parts of the foobar2000 SDK in release mode with whole program optimization enabled.

In particular, all calls to playable_location virtual methods turn into nonsense ( disasm shows inlining of methods of one of playable_location subclasses when working with a playable_location pointer with no knowledge of what the actual implementation is ).
This leads to nonsensical pointers returned by metadb_handle::get_path() among other things.

To mitigate this, add the following switch to your compiler command-line:
/d2notypeopt

Alternatively, disable whole program optimization:
Project's Property Pages => Configuration Properties => General => Whole Program Optimization: No Whole Program Opimitzation

If you encounter further issues, you can use an older toolchain version; VS2010 was used for all foobar2000 development for several years without known issues.


Update: posted on MS Connect-
https://connect.microsoft.com/VisualStudio/...dll-environment (https://connect.microsoft.com/VisualStudio/feedback/details/1138028/incorrect-c-class-method-devirtualization-in-a-multi-dll-environment)


Update 2017, problem still there. Meh.
Title: Visual Studio 2013 & 2015 compatibility notice
Post by: DrPizza on 2015-08-01 06:33:29
Tested VS versions:
[VS2013] 12.0.31101.00 Update 4
[VS2015] 14.0.22310.1 DP

A bug in recent Visual Studio compiler is preventing correct compilation of certain parts of the foobar2000 SDK in release mode with whole program optimization enabled.

In particular, all calls to playable_location virtual methods turn into nonsense ( disasm shows inlining of methods of one of playable_location subclasses when working with a playable_location pointer with no knowledge of what the actual implementation is ).
This leads to nonsensical pointers returned by metadb_handle::get_path() among other things.

To mitigate this, add the following switch to your compiler command-line:
/d2notypeopt

Alternatively, disable whole program optimization:
Project's Property Pages => Configuration Properties => General => Whole Program Optimization: No Whole Program Opimitzation

If you encounter further issues, you can use an older toolchain version; VS2010 was used for all foobar2000 development for several years without known issues.


Update: posted on MS Connect-
https://connect.microsoft.com/VisualStudio/...dll-environment (https://connect.microsoft.com/VisualStudio/feedback/details/1138028/incorrect-c-class-method-devirtualization-in-a-multi-dll-environment)

Although Connect hasn't been updated, this appears to be fixed in VS2015 RTM. LTCG isn't inlining the call, it's doing a regular mov ecx, [obj]; mov eax, [ecx]; call eax;. I haven't tested VS2013 Update 5 as I no longer have 2013 installed. I have concerns about the morality of having classes like this without a virtual destructor--while it's legal and can be done safely, it feels a bit like a booby-trap to me--but one shouldn't need such a thing to make the code compile correctly.
Title: Visual Studio 2013 & 2015 compatibility notice
Post by: Peter on 2015-08-03 11:12:13
Yep confirmed fixed in VS2015 RTM.

foobar2000 SDK has been updated (http://www.foobar2000.org/SDK), VS2015 is now properly supported.

Included project file are still for VS2010 but you should have no trouble loading these into VS2015.

Also, I'm glad to inform you that the free Community Edition of VS2015 has all the features you'll ever need for making foobar2000 components; no missing resource editor etc as with old Visual Studio Express editions.
Title: Visual Studio 2013 & 2015 compatibility notice
Post by: lvqcl on 2015-08-03 16:36:28
The first 'SDK 2015-01-15' link leads to SDK-2015-08-03.zip, the second 'SDK 2015-01-15' link leads to SDK-2015-01-14.zip
Title: Visual Studio 2013 & 2015 compatibility notice
Post by: Peter on 2015-08-03 21:24:38
Fixed, thanks for reporting.
The link was right, just the label was wrong.
Title: Visual Studio 2013 & 2015 compatibility notice
Post by: dofton on 2015-09-02 11:46:06
Working on your SDK now. We are VOX Player.
Have some partnership idea. How I can contact you Piotr?
Fixed, thanks for reporting.
The link was right, just the label was wrong.

Title: Re: Visual Studio 2013 & 2015 compatibility notice
Post by: davideleo on 2016-06-02 13:35:44
Also, I'm glad to inform you that the free Community Edition of VS2015 has all the features you'll ever need for making foobar2000 components; no missing resource editor etc as with old Visual Studio Express editions.

I'm totally new to visual studio and c++. I installed the free community 2015 edition, complete with all the updates and tried following the first steps of a tutorial I found online, but the VS2010 toolset is always missing.  I checked every component in the install wizard and even downloaded the windows 2010 platform sdk which according to some visual studio forums is the ultimate solution to the problem, but nothing changes. In the project properties window, the platform toolset drop-down list has every possible VS2015 and VS2013, but the VS2010 (v100) is listed as "not installed". What am I supposed to do?
Title: Re: Visual Studio 2013 & 2015 compatibility notice
Post by: marc2003 on 2016-06-02 15:41:28
Since you have VS2015, try foo_sample from the latest SDK. When it prompts you to upgrade compilers when you first open it, say yes.

See this thread for how to include WTL which is a requirement not mentioned when you download it.

https://hydrogenaud.io/index.php/topic,111311.0.html
Title: Re: Visual Studio 2013 & 2015 compatibility notice
Post by: davideleo on 2016-06-02 19:34:45
Since you have VS2015, try foo_sample from the latest SDK. When it prompts you to upgrade compilers when you first open it, say yes.

See this thread for how to include WTL which is a requirement not mentioned when you download it.

https://hydrogenaud.io/index.php/topic,111311.0.html

Thank you marc. I followed your instructions and updated the compilers, but the VS2010 toolset is still missing.
Title: Re: Visual Studio 2013 & 2015 compatibility notice
Post by: marc2003 on 2016-06-02 19:55:37
You don't need the v100 toolset if the upgrade went OK. Right clicking any of the projects>Properties should look like this...

(https://i.imgur.com/u2G3u6Z.png)

edit: Just to confirm, you did click OK when opening the solution file for the first time?

(https://i.imgur.com/S6HeY4e.png)

Title: Re: Visual Studio 2013 & 2015 compatibility notice
Post by: davideleo on 2016-06-02 20:09:58
edit: Just to confirm, you did click OK when opening the solution file for the first time?

Yes I did, and the property page now looks like in the pic you posted.
Following yirkha's tutorial (http://yirkha.fud.cz/tmp/496351ef.tutorial-draft.html) I tested my empty dll on a portable instance of foobar2000 and, if I get it right, I should be able to see it listed in the components page, but it's not there and I thought the reason was because the VS2010 toolset is missing.
Title: Re: Visual Studio 2013 & 2015 compatibility notice
Post by: foosion on 2016-06-03 07:05:20
You'll need to implement the componentinfo service to make the component show up on the Components page. You can do this via the DECLARE_COMPONENT_VERSION (http://foosion.foobar2000.org/doxygen/latest/componentversion_8h.html#af5a852279e239c501df5938341094de1) macro.
Title: Re: Visual Studio 2013 & 2015 compatibility notice
Post by: davideleo on 2016-07-20 23:22:02
You'll need to implement the componentinfo service to make the component show up on the Components page. You can do this via the DECLARE_COMPONENT_VERSION (http://foosion.foobar2000.org/doxygen/latest/componentversion_8h.html#af5a852279e239c501df5938341094de1) macro.

You mean what in yrkha's tutorial (http://yirkha.fud.cz/tmp/496351ef.tutorial-draft.html) is described like this?

Quote
Put something like this in the empty foo_whatever.cpp file:

Code: [Select]
#include "stdafx.h"

DECLARE_COMPONENT_VERSION(
  "foo_whatever",
  "0.0.1",
  "Sample foobar2000 component.\n"
  "See http://yirkha.fud.cz/progs/foobar2000/tutorial.php"
);
That will be enough to know that our component was properly built and loaded.

Or am I supposed to do something more in order for the empty component to show up in the preferences tab?
Title: Re: Visual Studio 2013 & 2015 compatibility notice
Post by: kode54 on 2016-07-20 23:35:57
You will need to declare a Preferences page as well. That minimal example will only make the component appear under the Components tab of Preferences, but not actually have its own page.
Title: Re: Visual Studio 2013 & 2015 compatibility notice
Post by: davideleo on 2016-07-20 23:49:16
You will need to declare a Preferences page as well. That minimal example will only make the component appear under the Components tab of Preferences, but not actually have its own page.

The problem is I cannot even get it to appear in the Components tab. After running a debug test I get an error saying it is impossible to open the "shared.lib shlwapi.lib" file. I copied the instruction as it is written in the tutorial into the project properties under Linker>Input>Additional Dependencies
Code: [Select]
$(SolutionDir)foobar2000/shared/shared.lib shlwapi.lib

Perhaps it is not written properly in the tutorial?
Title: Re: Visual Studio 2013 & 2015 compatibility notice
Post by: kode54 on 2016-07-21 03:51:09
That's two paths, so you must be adding them as one path or something.
Title: Re: Visual Studio 2013 & 2015 compatibility notice
Post by: davideleo on 2016-07-21 08:52:42
That's two paths, so you must be adding them as one path or something.

I thought so, too, but where is the shlwapi.lib? I cannot find it in the sdk.
Title: Re: Visual Studio 2013 & 2015 compatibility notice
Post by: lvqcl on 2016-07-21 16:32:38
it should be inside C:\Program Files (x86)\Microsoft SDKs\Windows\...
Title: Re: Visual Studio 2013 & 2015 compatibility notice
Post by: foosion on 2016-07-21 18:05:45
In other words, shlwapi.lib is part of the Windows SDK. You should not need to specify where it is located. The corresponding directory should be in the library search path by default if both the Windows SDK and Visual Studio are installed correctly.
Title: Re: Visual Studio 2013 & 2015 compatibility notice
Post by: davideleo on 2016-07-22 14:33:56
I'll try reinstalling visual studio 2015 community. Which components are actually required? Is the default installation ok?
Title: Re: Visual Studio 2013 & 2015 compatibility notice
Post by: NEMO7538 on 2016-11-06 14:43:13
Yep confirmed fixed in VS2015 RTM.

foobar2000 SDK has been updated (http://www.foobar2000.org/SDK), VS2015 is now properly supported.

Included project file are still for VS2010 but you should have no trouble loading these into VS2015.

Also, I'm glad to inform you that the free Community Edition of VS2015 has all the features you'll ever need for making foobar2000 components; no missing resource editor etc as with old Visual Studio Express editions.
I just upgraded my PC and I am hesitating between reinstalling my VS2010 copy or switching to this free VS 2015 edition.
Any advice ?
Title: Re: Visual Studio 2013 & 2015 compatibility notice
Post by: kode54 on 2016-11-06 19:08:06
I currently use VS2010 as the compiler from VS2015 the IDE and debugger. I'm not sure that Peter even uses 2015 right now for anything other than editing.

The last time I tried to use 2015 the compiler (v140_xp) to build a component, it crashed with an ICE (internal compiler exception) on shared.lib, which is still supplied pre-built with 2010. You're welcome to try your luck anyway.
Title: Re: Visual Studio 2013 & 2015 compatibility notice
Post by: 3dyd on 2016-11-06 22:52:20
I use VS2015 Community. With v140_xp and /Zc:threadSafeInit- in 'C/C++ -> Command Line' all is fine beginning from XP SP2. Also starting from some VS version SSE/SSE2 in project is enabled by default, so that is disabled back (/arch:IA32 in C/C++ -> Code Generation -> Enable Enhanced Instruction Set) to respect old CPUs (was asked for).
Title: Re: Visual Studio 2013 & 2015 compatibility notice
Post by: kode54 on 2016-11-07 05:47:10
I may try that again, but again, the last time I tried linking to shared.lib from the latest SDK, I got an ICE and gave up. I may need to update my compiler again just to be sure.
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: Peter on 2017-03-31 13:38:45
Problem still there in VS2017.

I have to credit MS that after adding /d2notypeopt all over the place, all our codebase appears to compile correctly.

Still, a better solution - such as a __declspec() to suppress this optimization for specific classes would be very appreciated. Being unable to compile correctly working code with default optimization settings sucks.
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: musicmusic on 2017-04-02 16:45:58
Is there a new test case? The original one (VS2013-miscompile-v1.0.zip) seems to be behaving correctly for me with the v141_xp toolset in VS2017.
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: Case on 2017-04-03 07:01:06
As far as I know Peter hasn't tried making a new test case. But we saw a simple DSP component crash the moment it was activated when compiled with dynamic CRT linking. Disabling the devirtualization optimization made things work.
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: musicmusic on 2017-04-03 21:02:28
Partly I was wondering whether VS2015 Update 3 was said to be OK (previously VS2015 RTM was said to be fine).
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: Case on 2017-04-04 06:28:30
I heard VS 2015 is also affected. You can test with the sample component I made: http://www.saunalahti.fi/~cse/temp/foo_dsp_crash.zip (http://www.saunalahti.fi/~cse/temp/foo_dsp_crash.zip). Contains a VS 2017 compiled binary and sources.
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: Peter on 2017-12-08 11:51:31
foobar2000 core (as for 1.4 alpha) is being developed using VS2017, so if there are any new issues I will be the first to know.

Since foobar2000 still supports Windows versions as old as Windows XP - and that's not expected to change this decade - you should use "Windows XP (v141_xp)" toolchain to compile your components in order to support all systems that foobar2000 runs on, unless you specifically require a newer version of Windows.

Since VS2017 version 15.3, newly created projects get a /permissive- switch:
https://docs.microsoft.com/en-us/cpp/build/reference/permissive-standards-conformance
You can toggle this in C/C++ => Language => Conformance mode
While strict compliance with C++ standards is a good thing, it rejects various code that all MS compilers from the past 15 years had no problem with, in particular refusing to compile foobar2000 SDK (a fixed version is on its way) and Windows SDK version 7.0 which you're expected to use with the v141_xp toolchain.
Therefore I recommend turning Conformance mode to off when compiling foobar2000 code.

To summarize-
Correct compilation of foobar2000 code with VS2017 requires:
C/C++ => Language => Conformance mode: off
C/C++ =>Command Line => /d2notypeopt
If your component supports Windows XP:
General => Platform Toolset : Visual Studio 2017 - Windows XP (v141_xp)
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: lvqcl on 2017-12-14 20:13:42
Since foobar2000 still supports Windows versions as old as Windows XP - and that's not expected to change this decade
BTW ffmpeg developers consider dropping WinXP compatibility: https://ffmpeg.org/pipermail/ffmpeg-devel/2017-December/222354.html

P.S. Though according to https://trac.ffmpeg.org/wiki/Downstreams version 3.2 will be supported up to 2022-06? So basically nothing to worry about, sorry.

[added 2017-12-29] P.P.S. WinXP support in ffmpeg was dropped in this commit (http://git.videolan.org/?p=ffmpeg.git;a=commit;h=9b121dfc32810250938021952aab4172a988cb56)
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: lvqcl on 2017-12-24 19:35:23
The recommended compiler options does not include Enable Enhanced Instruction Set: No Enhanced Instructions (i.e. /arch:IA32).
Does it mean that foobar2000 1.4 will require SSE2, so I can safely use it in my components without checking?
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: Case on 2017-12-24 20:11:06
I just tested on a machine without SSE capability and 1.4 beta 1 crashes instantly. I'm certain this is by mistake as there's no reason to force such requirement.
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: Case on 2017-12-29 14:35:14
1.4 beta 2 has corrected the mistake and no SSE instructions are required anymore.
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: askold on 2017-12-29 16:50:17
1.4 beta 2 has corrected ... no SSE instructions are required anymore.
perfect! it works on athlons xp!
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: kode54 on 2017-12-31 04:49:01
Found a new VS 2017 bug for you:

https://gist.github.com/kode54/9634e336b4ee8274fb7a03118cf1cae7

E: Community report, for completeness' sake:

https://developercommunity.visualstudio.com/content/problem/174954/msvc-2017-version-1552-c-optimizer-with-fast-math.html
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: Peter on 2018-01-11 16:20:31
Thread unpinned.

New foobar2000 SDK is out, with working VS2017 project files, and everything that you need to know is in the readme.
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: Rollin on 2018-01-20 15:42:47
1.4 beta 2 has corrected the mistake and no SSE instructions are required anymore.
Although it seems that built-in visualizations Spectrum, Oscilloscope and Spectrogram still require SSE (2?). On emulated pentium 2 and 3 fb2k 1.4 beta 3 crashes on playback start when any of this visualisations are enabled.
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: Peter on 2018-01-23 11:10:02
Nice find.
The FFT part of visualisation_manager code in foobar2000.exe still gets compiled with SSE - against the settings.
Possibly tied to being a single C file in a project where everything else is C++. Still, the properties say "No Enhanced Instructions (/arch:IA32)", so it's lying.

Follow up-
Apparently VS2017 generates SSE code regardless of settings if you have sin()+cos() in a chain.
This line is enough to trigger the bug-
static void bork(float * out) {out[0] = (float)cos(0);out[1] = (float)sin(0);}
Relevant command-line arguments:
/arch:IA32
/O2 or /Ox  ( no bug with /O1 )
/fp:fast  ( no bug with /fp:precise but it's slow that way )
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: lvqcl on 2018-01-23 17:53:57
It reminds me of this bug: https://groups.google.com/forum/#!msg/mozilla.dev.platform/dZC39mj5V-s/AKxFfQfkAAAJ
edit: fix link
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: Case on 2018-01-23 20:16:12
Seems like a similar bug. Same optimizer in a newer form in VS2017 after all. In a typical Mozilla fashion their solution seemed to be to fuck everyone who doesn't have a new machine and just require SSE. Peter's solution is to compile the problematic code with /d2SSAOptimizer- parameters to get working code until MS releases a fixed version.
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: Rollin on 2018-01-27 15:46:09
...and it seems that libFLAC-fb2k.dll included with 1.4 also doesn't like ancient CPUs. fb2k crashes when adding FLAC file to playlist. Other formats (ogg, mp3) can be played.
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: lvqcl on 2018-01-27 17:03:28
If I understand correctly, libFLAC-fb2k.dll is built with GCC, so it's not affected by MSVS bugs.

However, FLAC uses -msse2 flag by default (see configure.ac), and it's necessary to pass --disable-sse option to ./configure if you want it to work on older CPUs (it won't disable runtime CPU checks, so libFLAC will stil use SSE-optimized routines if possible).
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: Black_Over_Bills_Mothers on 2018-03-20 12:12:54
Hi Peter
I've just tried the latest SDK (2018-03-06) with VS 2017 Enterprise and Community editions versions 15.6.2 and 15.6.3 and there are many errors including missing atl header files ie atlapp.h, atlctrls.h and atlcrack.h.

Bearing in mind that I'm a noobie with C++, it could well be me!!
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: Black_Over_Bills_Mothers on 2018-03-21 09:26:19
Ooops! I I hadn't loaded WTL (https://sourceforge.net/projects/wtl/)

See post below for description;
https://hydrogenaud.io/index.php/topic,111311.msg917243.html#msg917243
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: davideleo on 2018-06-19 22:50:04
I'm taking a second chance on learning c++, visual studio and component development. I don't know if Yirkha's tutorial (http://yirkha.fud.cz/tmp/496351ef.tutorial-draft.html#) still applies to the latest sdk and vs 2017. I followed his test project instructions and failed to build the project. These are the last lines of the debug output window:

Code: [Select]
1>Done building project "foobar2000_SDK.vcxproj".
4>------ Build started: Project: foo_whatever, Configuration: Debug Win32 ------
4>stdafx.cpp
4>j:\foobar2000\sdk-2018-03-06\foobar2000\sdk\advconfig.h(251): error C3861: 'get_static_instance': identifier not found
4>j:\foobar2000\sdk-2018-03-06\foobar2000\sdk\advconfig.h(256): note: see reference to class template instantiation 'advconfig_integer_factory_<int_t_>' being compiled
4>j:\foobar2000\sdk-2018-03-06\foobar2000\sdk\advconfig.h(252): error C3861: 'get_static_instance': identifier not found
4>Done building project "foo_whatever.vcxproj" -- FAILED.
========== Build: 3 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: davideleo on 2018-06-22 18:44:49
I've just tried the latest SDK (2018-03-06) with VS 2017 Enterprise and Community editions versions 15.6.2 and 15.6.3 and there are many errors including missing atl header files ie atlapp.h, atlctrls.h and atlcrack.h.
Ooops! I I hadn't loaded WTL (https://sourceforge.net/projects/wtl/)

See post below for description;
https://hydrogenaud.io/index.php/topic,111311.msg917243.html#msg917243

Did you succeed building the foo_sample component? I still get a missing atlapp.h warning, even after including the WTL directory as described by marc2003.
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: davideleo on 2018-06-25 16:15:30
I'm taking a second chance on learning c++, visual studio and component development. I don't know if Yirkha's tutorial (http://yirkha.fud.cz/tmp/496351ef.tutorial-draft.html#) still applies to the latest sdk and vs 2017. I followed his test project instructions and failed to build the project. These are the last lines of the debug output window:

Code: [Select]
1>Done building project "foobar2000_SDK.vcxproj".
4>------ Build started: Project: foo_whatever, Configuration: Debug Win32 ------
4>stdafx.cpp
4>j:\foobar2000\sdk-2018-03-06\foobar2000\sdk\advconfig.h(251): error C3861: 'get_static_instance': identifier not found
4>j:\foobar2000\sdk-2018-03-06\foobar2000\sdk\advconfig.h(256): note: see reference to class template instantiation 'advconfig_integer_factory_<int_t_>' being compiled
4>j:\foobar2000\sdk-2018-03-06\foobar2000\sdk\advconfig.h(252): error C3861: 'get_static_instance': identifier not found
4>Done building project "foo_whatever.vcxproj" -- FAILED.
========== Build: 3 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

I don't want to sound annoying, but if my question is too clueless to be answered, please let me know, so that I can deal with it. Elsewise, is there anything wrong with the advconfig.h file?
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: Case on 2018-06-25 18:43:21
I think this is the wrong thread for your question, but I'd help if I could. I don't know what one has to do to trigger the errors you get.

But if you want to start by compiling the bundled sample component, you just load the solution file foo_sample.sln and hit Build Solution.
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: davideleo on 2018-06-25 19:25:31
But if you want to start by compiling the bundled sample component, you just load the solution file foo_sample.sln and hit Build Solution.

This triggers the missing atlapp.h warning. That's why I downloaded the windows template library, but didn't help.
Anyway I'll follow your advise and open a new thread.
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: Case on 2018-06-25 19:56:48
The ATL helpers piece of the SDK requires WTL (http://wtl.sourceforge.net/). This is documented in the SDK readme. If you don't need UI stuff you can remove all ATL stuff and all parts from the sample that give errors. But WTL is very simple to install and the zip comes with a readme file that has instructions.
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: davideleo on 2018-06-25 20:09:12
The ATL helpers piece of the SDK requires WTL (http://wtl.sourceforge.net/). This is documented in the SDK readme. If you don't need UI stuff you can remove all ATL stuff and all parts from the sample that give errors. But WTL is very simple to install and the zip comes with a readme file that has instructions.

Oooops...   :-[   I missed the readme and relied only on marc2003 instructions. I'll check it out immediately! Anyway, here's the new thread (https://hydrogenaud.io/index.php/topic,116178.msg958802/topicseen.html#new).
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: kode54 on 2018-06-26 08:47:00
Add the WTL (<wtl install path>\include) to the preprocessor header includes paths for both the ATLHelpers and the main foo_sample project files.

The distributed SDK assumes you will simply configure this path into your Visual Studio system-wide default paths every time you freshly install a new Windows machine.
Title: Re: Visual Studio 2013-2017 compatibility notice
Post by: VEG on 2022-08-19 18:36:49
It makes sense to update this page (https://wiki.hydrogenaud.io/index.php?title=Foobar2000:Development:Visual_Studio_Compatibility) to reflect that the problematic optimization is disabled since VS2019 v16.6 by default (https://developercommunity.visualstudio.com/t/invalid-function-call-de-virtualization/1125222#T-N1145536).