Posts in enmsdn

What part of Windows is written in .Net/WPF/Silverlight?

user 曹一聪 on zhihu is curious how widely .Net is used within Windows components. Obviously an operating system component cannot depend on something that isn’t in the operating system, so nothing uses Silverlight in the desktop version of Windows. And because XP editions mostly did not ship with any .Net framework version, practically nothing from the XP days can use .Net. Only components newer than XP or rewrote after XP can use .Net, except those Windows Media Center and Tablet PC components that have .Net dependencies.

Read more ...


Flash Player: Loading from memory

user cucao wants to know how to play a flash file from application resource. The user wants to use a dongle to protect unauthorized viewing of the flash file so can’t just put the swf file in plain sight.

Read more ...


What’s new in Visual Studio Tools for Windows 10 Preview

Looks like Windows 10 SDK gets renamed. This post focuses on the Win32 wide of changes. Changes in the [STRIKEOUT:WinRT] Universal App Platform (UAP) side can be found at https://dev.windows.com/en-us/whats-new-windows-10-dev-preview. Some UAP APIs are available to all desktop apps, for exam DirectX 12 and notification center (should not come as surprise, older version of these APIs are already callable from Win32 apps ). Project Centennial also supports enabling UAP APIs to desktop apps, provided they meet certain requirements and deploy using the new appx model. In DirectX12 (of course) The Spartan webbrowser (not sure, some Spartan-specific commands like IDM_SHAREPICTURE exists but no word on how to host a Spartan webbrowser) new API partition WINAPI_FAMILY_ONECORE_APP Support for ARM 64 Universal CRT  Windows Core Audio improvements: Prioritize buffer selection in Windows Core Audio APIs to reduce audio latency (e.g. alerts, game effects, game chats, user speech, movie etc) . Low power consumption audio is there for WinRT but not for Win32 :(. Well DJs are gonna be happy about this change. Unsurprisingly some low power API for video codec too. Guess playing movies do kill battery life. Losts of changes in the Certificate Enrollment API…. and what’s up with the desktop family guard macros? someone gonna try include the headers in a Windows Store app? APIs for not domain/AD joined clusters. Wow the documentation is up in MSDN already. The Windows Server team is faster this time. Guess the consumer team fall behind because of the Phone edition. Wow Microsoft is adding stuff to COM again. Did not expect this to happen. The REGCLS enumeration gets a new member.. after 15 years. You are joking right? Why this empty ifdef in the tree control styles and extended styles? Looks like something got cut. #if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD) #endif API for Jet - Extensible Storage Engine version version 10, like the new 8-byte unsigned long long column type. IShellUIHelper7 adds some more methods to the window.external object… like SelectUAString and getter/setter methods for experimental flag. Can I change between Trident and EdgeHtml this way? Secured D3D in Media Foundation. Guess WebGL forced that. Now you can customize the context menu in a PDF document displayed in a hosted webbrowser control. Some new SQLite-specific error codes in winerr.h. It seems SQLite is part of OS. New system folders like camera roll and saved pictures. FOLDERID_SkyDrive is getting renamed (of course) but will remain for some time for backward compatible reasons. TODO: neerajsi-2013/12/08 - this should be moved to official documentation.huh? Graphics streaming in Remote Desktop APIs. Out: D3D 8 (it is still there in Windows 8? Did not notice) IA64 Moved (desktop APIs that were not available to Windows Store apps to be supported in universal apps) Threading (CreateThread etc) Winsock

Read more ...


Book review: Mastering Windows 8 C++ App Development

Disclaimer: I am a Microsoft MVP in Visual C++, so is Pavel Yosifovich, the author of the book. Mastering Windows 8 C++ App Development by Pavel Yosifovich is a new addition to the Windows Store development books. It took me a while to read (304 pages) but is well worth the time from the perspective of a C++ developer. The book obviously went through great lengths to be comprehensive, not only introduced the typical Windows Runtime (WinRT) APIs in a crisp manner but also added a refreshment of C++ 11, the Model View ViewModel (MVVM) pattern, and the Windows Runtime C++ Template Library (WRL). In addition, being a book for C++ developers, the author’s emphasis on performance can be found in several tips and discussions, which is a nice focus for C++ developers. There are also several weaknesses in the book. Introducing WRL before C++/CX may be a poor choice as it is difficult to inspire the reader with laborious code. Also the book could use a few more details on DirectX and some WinRT APIs such as GeoPosition. Nevertheless, the book is an excellent text for the subject and I recommend the book to C++ programmers who want to start developing Windows Store apps and can do research outside of the book.

Read more ...


Another breaking change related to 64 bit compatibility, this time in TAPISRV w/Windows 8

The ADO team had to make a breaking change the ADO APIs due to compatibility problem with Microsoft Office. Now it seems to be Tapi’s turn. In the 64 bit editions of Windows 8 and Windows Server 2012, some TAPI providers would stop getting incoming calls due to implementation changes in the TAPI service (TAPISRV) that had to be done for 64 bit compatibility. The problem is pretty obvious from the documentation, for example LINE_NEWCALL has this: htLine = (HTAPILINE) hLineDevice; htCall = (HTAPICALL) 0; dwMsg = (DWORD) LINE_NEWCALL; dwParam1 = (DWORD)(HDRVCALL) hdCall; dwParam2 = (DWORD)(LPHTAPICALL) &htCall; dwParam3 = (DWORD) 0; The parameters can’t really be passed as DWORDs - on a 64 bit build, pointers are 64 bit in size, and a DWORD is 32 bit. Fortunately this can be corrected fairly easily, just ignore what the documentation said and treat the DWORD parameters as DWORD_PTR, however for the end users they would need updates from TAPI providers to get TAPI working on their Windows 8 /Server 2012 machine. According to TAPI MVP Andreas Marschall, the following TAPI providers are affected (If you got a provider released before 2012,  it is likely also affected)

Read more ...


How to: Migrating a CLR console Visual C++ project to Windows Forms

Note: Windows Forms programming in new development is discouraged by Microsoft at this point as Microsoft wants to make full use of hardware accelerated drawing instead of using the CPU-intensive GDI. But maintaining old Windows Forms code in Visual C++ 2012 is still supported, GDI isn’t going anywhere anytime soon. Visual C++ 2012 removed the Windows Forms project template and I see people scramble to find ways to create a Windows Forms project.  There is a walkaround that’s been around for years, that is, to convert a CLR console application to a Windows one, then add forms related code to the project. The basic steps are listed at http://support.microsoft.com/kb/317433, conveniently named “How to suppress the console window for a managed extensions to Visual C++ Windows Forms application”. Yes, the need to convert a C++ console application to windows forms is that old, back all the way back in the managed extensions for C++  days. So what I need to do to add Windows Forms support to a C++/CLI console application? Of course the System.Windows.Forms.dll reference is missing in a new console application, so I need to reference it:

Read more ...


Add the correct interface first in Adding an MFC Class from an ActiveX Control wizard.

In good old times aka VC6, if you want to use an ActiveX in MFC, the Components and Controls Gallery would generate all the properties and methods of an ActiveX and pull dependent types and create wrapper classes for them as well. And it was good. It magically knows the main class of the Windows Media Player ActiveX is CWMPPlayer4 and that GetCurrentMedia method returns CWMPMedia. Welcome to the modern Visual C++. Now comes a new wizard that gives you options to choose interfaces to import from. At the same time you got to decide if you really need that many types from an ActiveX.  If you went the unfortunate path of Adding a Member Variable wizard in the dialog editor and somehow got a COCX1 class back, you don’t have the luxury to choose, and you end up with an CWnd wrapper class that does not really wrap up the properties and methods of the ActiveX. It is still good for early binding (like querying IWMPPlayer4 from the result of CWnd::GetControlUnknown) but if you plan to use late binding and MFC’s OLE support (hello COleException!),  you probably want to delete the COCX1 files and start over with the Adding a Class from an ActiveX Control wizard. Good thing about the new Adding a Class from an ActiveX Control wizard is that most of time we don’t care about the majority of the types in the ActiveX’s type library. We are not going to call most of the ActiveX’s functionality anyways, so selecting what we would use makes sense. Bad thing is that now we don’t know the return type of a method from the generated classes if the return type is LPDISPATCH, lead to guesswork or fire up OLEView to look up the types in the ActiveX’s type library). Now comes the worst part of the new wizard. The wizard somehow lost its ability to find the correct ActiveX control class and opt to use the first selected interface to generate a CWnd wrapper.  If you naturally click on the >> button to select all interfaces in the Windows Media Player ActiveX at once, you get a CWMPCdromCollection derived from CWnd. That  won’t work as the ActiveX does not implement the IWMPCdromCollection interfaces (undefined behavior can happen if you call the generated methods), and certainly the WMPCdromCollection class isn’t an insertable ActiveX. Fortunately it is easy to avoid this issue if you add the ActiveX’s main interface first (e.g. IWMPPlayer4 for the Windows Media Player control) before adding the rest of interfaces, or correct the generated code for the first interface. That is, swap the CWnd and COleDispatchDriver code between the wrong class and the correct class for the main interface. It takes some time to find the correct class for the ActiveX control, however. Side note: For code cleanness, you probably want to move the InvokeHelper code in the headers to cpp files like VC6 did. A good C++ refactoring tool can help that tremendously.

Read more ...


Howto: reset IE security zone settings programmatically

Internet Explorer 7 introduced the IInternetZoneManagerEx2 interface, which has a FixUnsecureSettings method to reset all security zone settings. Like all other IInternetZoneManager* interfaces, you can query this interface from the internet zone manager object: IInternetZoneManagerEx2* pzoneManager=NULL; HRESULT hr=CoCreateInstance(CLSID_InternetZoneManager ,NULL,CLSCTX_INPROC_SERVER,IID_IInternetZoneManagerEx2,(LPVOID*)&pzoneManager); if(hr==S_OK && pzoneManager!=NULL) { hr=pzoneManager->FixUnsecureSettings(); } There’s another CoInternetCreateZoneManager function to get the zone manager object’s IInternetZoneManager interface.

Read more ...


Choosing formats when putting data on clipboard

The topic is from a forum discussion at https://web.archive.org/web/20131020094354/http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/94bb2db4-3ca2-4cd8-9f7c-6dd9aab6fd18/need-help-to-complete-gdi-program-to-loadsave-to-clipboard?forum=windowssdk

Read more ...


What’s new in Windows 8 Developer Preview SDK headers

This is by no means a complete list but just some observation on files that caught my eye. Some are just regular header file updates for Windows 7 and does not necessary require Windows 8. Some other APIs moved to header files with more readable names. Improvements are focused, of course, in natural input, efficiency, gaming experience and IE. You can hear the silence scream of “Tablet!Tablet!Tablet!” here. Note Windows 8 is still a developer preview and there is no guarantee any new feature will survive the final cut or there won’t be new API for existing features add in Beta/RC/Gold. UI: There is no improvement in the GDI-based shell common controls. No surprise here. The new UI would be based on WinRT and will use GPU to render instead of CPU. There are COM API for printing, which is traditionally performed via GDI. A lot of Direct2D and Direct3D improvements. XAudio2 added and battery/pad support  added to XInput. Improvement in 3D rendering, device removal during capturing and stream seeking in Windows Media Foundation. API for H264 codec. Shell Header guard for IE5.01 or lower are removed. Building for Windows 2000 is now practically impossible. Some header guard switched to NTDDI_VERSION. There is A new camera UI control based on COM. Somehow the version guard of Shell_NotifyIconGetRect is lost, this might be a header file bug. Networking: Lots of IE 10 APIs and HTML 5 support. ActiveScript optimized for multiple instance and webworker. Also there is a new IActiveScriptContext interface to get url, line and offset of the script. New timeout configuration in WinInet. ActiveX filtering, and options to enable/disable audio/video plugins added for IE security zones. Others Accessibility for windowless controls and lots of UI automation improvements, including grid and spreadsheet types. Candidate list integration and async document support with Text Service Framework. ARM support to .Net APIs.  A lot of pointer device and touch messages, notification and drawing.

Read more ...


Bug in Security Update for Visual C++ Redistributable Package: April 12, 2011 causes program error on Windows 2000

[caption id=”” align=”alignright” width=”300” caption=”Image via Wikipedia”]Windows Update version 3 in Windows 98[/caption]

Read more ...


How to solve LNK2001 errors related to Windows SDK CLSIDs

User IMFCoder wants to know how to solve a LNK2001 error related to CLSID_CMpeg4sDecMediaObject. The user has no problem linking a lib file in the project but couldn’t find which lib the CLSID is in. The Windows SDK is strangely cryptic on which lib file the CLSID is exported from. Luckily you can find out the library file you need to link with, if you execute the following command line in the SDK command prompt Update: use findstr /m /S /c:”CMpeg4” *.lib is easier C:\Program Files\Microsoft SDKs\Windows\v7.0\Lib>for %a in (*.lib) do dumpbin /symbols %a |find “CMpeg4” After a bunch of fruitless searches, the search yields the results when it encounters wmcodecdspuuid.lib C:\Program Files\Microsoft SDKs\Windows\v7.0\Lib>dumpbin /symbols wmcodecdspuuid.lib   | find “CMpeg4” 056 00000000 SECT1D notype       External     | _CLSID_CMpeg4DecMediaObject 059 00000000 SECT1E notype External     | _CLSID_CMpeg43DecMediaObject 05C 00000000 SECT1F notype       External     | _CLSID_CMpeg4sDecMediaObject 05F 00000000 SECT20 notype       External     | _CLSID_CMpeg4sDecMFT 065 00000000 SECT22 notype       External     | _CLSID_CMpeg4EncMediaObject 068 00000000 SECT23 notype       External     | _CLSID_CMpeg4sEncMediaObject There is a big uuid.lib file contains most of the SDK CLSIDs in the Windows SDK, and it is likely linked by default if you use Visual C++’s project templates, so you may not see the link error at all if you use common CLSIDs like CLSID_InternetExplorer. There are also GUIDs defined in the Windows SDK using the DEFINE_GUID macro. The SDK assumes you to initialize the GUID using the methods demonstrated in How to avoid error “LNK2001 unresolved external” by using DEFINE_GUID.

Read more ...


What is the difference between int and System::Int32

Some may say identical, at least that’s what the Visual C++ compiler tells you at the first glance  when you turn on /oldsyntax public __gc class Class1 { public: void F1(int a){} void F1(System::Int32 a){} //Error    2    error  2535:  void Class1::F1(int)’ : member function already defined or declared } Okay, so if I add & to the parameter types I should get the same error right?void F1(int&a){} void F1(System::Int32& a){} Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped Wait, didn’t I get an error just now? You are right, somehow the compiler treat the two types differently when passing by reference. look at the function signatures in MSIL. Int32 is passed by reference as expected

Read more ...


Application crash when forcing IE8 rendering mode in webbrowser host

[caption id=”” align=”alignright” width=”256” caption=”Image via Wikipedia”]Internet Explorer Mobile Logo[/caption]

Read more ...


How to force popup window to navigate in the same window in a webbrowser control

When clicking on an link that targets a new window,  the default behavior of a webbrowser control host application is to open a new window in Internet Explorer. User ben_lai wants to know how to handle the click and navigate to the same window. There are three events that notifies a new window, NewWindow (The current documentation of this event is wong, check http://support.microsoft.com/kb/185538/EN-US/ for the parameters of the event), NewWindow2 and NewWindow3, each one has a cancel parameter to stop the new window being created, though for NewWindow2, it requires cooperation of BeforeNavigate2 to get the url of the new window. After getting the url, the navigation can be carried out in the original window by calling Navigate2. The obsolete NewWindow Event has the url right in the parameter so you can cancel the navigation and call the navigation methods of the webbrowser control with the new url. The problem is, the event is there for compatibility purposes and you don’t know how long the event will still be raised. And it is not without problem, one fixed bug causes a 60 seconds delay on new window creation, another causes the navigation to fail. The fix for the latter? use NewWindow2. The NewWindow2 event, introduced in IE4, does not have the url parameter. So you cannot simply cancel the event. To get the url, you need do the normal processing, create a hidden new webbrowser host window and assign the webbrowser to the event’s ppdisp parameter, then hook BeforeNavigate2 in the new window to get the url (may require client to patch their Windows if they are on Windows Vista). Once you get the url, you can destroy the new window and navigate in the old window. The NewWindow3 event, introduced with Windows Server 2003 SP1 and Windows XP SP2, is designed for the webbrowser host to get notified of the decision of the popup window manager based on user preference (for example, if the new window should be opened in a new window or a new tab in the current window), though the popup window manager’s behavior can be customized too. For the purpose of cancelling navigation and navigate to the old window, it does not matter how the new window should be opened, so you can just take the url and execute the same logic as in the NewWindow event. Since everyone should be using IE7 or higher now, the event should be supported by the browser. If the client can’t upgrade IE, at least ask them to fully patch their Windows. The original poster’s question is in the VB forum so all the native events are available. For .net programmers, you can hook up the event via IConnectionPointContainer directly if you are inserting the webbrowser as an ActievX on a Windows Form, or extend the webbrowser site if you are using the System.Windows.Forms.Webbrowser class. Update: WPF users who want to use System.Windows.Controls.WebBrowser are out of luck, they need to host the ActiveX versions of the webbrowser control to get a hand on the native events.

Read more ...


Getting local FTP home directory from IIS programmatically

User xiaoc1026 wants to know how to access IIS to get the home directory of the FTP web site in Visual C++. Before IIS6 you need to access the metadata in IIS configuration via IMSAdminBase::GetData. The hard part to find the path of the IIS setting. Before IIS 6, the metadata isn’t saved in XML. However you can search the path of a property though the admin script. You can find the path property from the IIS metadata propertiy reference documentation. The IIS WMI provider, introduced in IIS6, makes the query a lot easier. Now you can query for IIsFtpVirtualDirSetting.Path directly, though querying metadata should still work.

Read more ...


Intercept the download dialog in webbrowser control

User rsd102 looks already find the solution to his question when he posted the question to CSDN, except for one missing piece. The sample he found is for overriding the global download manager, and what he need is a process wide override. It looks like rsd102 is loving research. He found more than he can understand initially. After being suggested twice with the vague IE SDK documentation he decided to post the sample code he was working on. And when the final answer was given he had problem adopting it. The answer was for adding INewWindowManager, not IDownloadManager, to the webbrowser site, and it has undisclosed error that prevented his adoption. In VC6 things are easier-there is not much browser host support-so the user settled with a VC6 solution. it is pleasant to see a user doing active research before positing a question, however we may not see the question online if the user take some time reading the documentation he found during research.

Read more ...


Make the webbrowser control styled the same way as the hosting application

User wtx_sonery wants to know whether it is possible to style the webbrowser control with the rest of the application. The answer is yes, you can implement IDocHostUIHandler’s GetHostInfo method and return DOCHOSTUIFLAG_THEME in the host flags. IDocHostUIHandler is already implemented in MFC and ATL. For MFC there are CHtmlControlSite and CBrowserControlSite but you should be overriding the GetHostInfo function in CHTMLView and CDHTMLDialog. In ATL the template definition is in Atliface.h but you need to derive from IDocHostUIHandlerDispatch by yourself. Implementing IDocHostUIHandler Windows Forms gets a little tricky. Windows Forms already implemented it on its WebBrowserSite class but you can’t extend it. Following the .Net Framework Class Library Security Guideline the Windows Forms version of the IDocHostUIHandler interface is internal to the class library. If you derive from WebBrowserSite and implement your own version of IDocHostUIHandler, you still get Windows Forms’s implementation of IDocHostUIHandler when you do QueryInterface on the browser site. That means you need to get ride of the Windows Forms wrapper of the webbrowser control and provide your own hosting implementation. WPF/Silverlight users, you are out of luck. The stock version of the webbrowser control does not even provide a way to customize the host site. The best thing you can do is to see if Windows Forms interop is available to the platform and if so, embed a csexwb Windows Forms control. There are some unsolved problems in the csexwb discussion area, however. There are other switches you can tweak the browser control’s behavior. However there is only one bit available in the enum for future flags. Maybe that’s why IE introduces feature control in IE6 for Windows XP SP2 where features are based on enum – you get a 4GB range for new features!

Read more ...


How to change the user agent and download control flags in a webbrowser control host

User vnetvvv wants to know how to change the user agent string in a VB6 webbrowser control. The knowledge base article PRB: WebBrowser Control Clients Share Global Settings provides the necessary code for changing the user agent of the webbrowser control when the webbrowser ask for it. But how to have the webbrowser control ask for the user agent? Well the webbrowser control is an ActiveX, so it implements IOleControl::OnAmbientPropertyChange. The host can call the method to notify the webbrowser control about the property change after the browser window is created. The list of ambient properties can be found in the walkall sample, the most useful ones are DISPID_AMBIENT_USERMODE (which VB6 supports), DISPID_AMBIENT_DLCONTROL and DISPID_AMBIENT_USERAGENT. The documentation of other ambient properties can be found in the documentation of CComControlBase’s GetAmbient Property Methods Note the knowledge base article PRB: WebBrowser Control Clients Share Global Settings also says DISPID_AMBIENT_USERAGENT cannot be used to alter the user agent string in DOM or when the navigation is from code. Changing the user agent string in registry, of course, can change the behavior but will also have global effect. Another way to change the user agent is to go directly into the networking layer of webbrowser control and change the user agent process-wide. Since most of the time per-page browser setting isn’t necessary this can also be used in custom browsers. The WinInet function UrlMkSetSessionOption has a flag URLMON_OPTION_USERAGENT that can be used to change the user agent, However it only updates DOM/Javascript and ignore the WinInet stack so other WinInet client won’t be affected, until you call UrlMkSetSessionOption with URLMON_OPTION_USERAGENTREFRESH. This is better for VB6 and .Net programmers since it does not involve declaring a lot of OLE interfaces. You can get the user agent from the DOM (document.parentWindow.navigator.userAgent).

Read more ...


How to disable navigation sound in webbrowser control

User kill211 does not like the click sound when he calls WebBrowser.Navigate. He wonders if there is a way to disable it without modifying HKEY_CURRENT_USER\AppEvents\Schemes\Apps\Explorer\Navigating, which has effect on other applications.

Read more ...


Walkaround for Error : An add-on for this website failed to run. When opening Visual C++’s Add Variable Wizard after IE 8 is installed

Update: it looks like a lot of people are hitting this page by mistake. If you don’t write software for a living then this page is probably not for you. Download: http://jiangsheng.net/Documents/IE8AddZone.zip Prerequisite: Microsoft Visual C++ 2005 SP1 Redistributable Package (x86) This program is designed to temporary circumvent the “An add-on for this web site failed to run. Check the security settings in Internet options for potential conflicts” error in Visual Studio after installing IE8. For more details about this problem, visit https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=425510 Update: the VC team’s workaround is at http://blogs.msdn.com/vcblog/archive/2009/03/28/some-vs2005-and-vs2008-wizards-pop-up-script-error.aspx. However, I still suggest copying other settings from a restricted zone before modify the 1207 key. Clicking the create button will create another Internet Explorer security zone with the id 1000 that will affect all urls not included in other zones. This will allow separate security settings for webbrowser control hosting application such as Visual Studio. If settings are copied from a trusted configuration such as “my computer”,a webbrowser control hosting application may not experience the aforementioned error. Security Remarks: do not visit unsecured web site or use email software on the same computer after creating the new zone as the security impact of the new zone is not yet tested. Applications that host webbrowser control should implement their own security manager if they want to run ActiveX in the browser control. If you received a fix from the IE team for this problem, please delete the zone created by this problem by clicking the delete button. Visit https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=425510 for the status of this problem. For more information about adding zones to IE, visit http://www.nthelp.com/50/addazone.htm . For more information about Internet Explorer security zones, visit http://support.microsoft.com/kb/182569 For more information about Visual C++ wizards, visit http://msdn.microsoft.com/en-us/library/aa730846(VS.80).aspx Suspicious url actions from Regmon logs:

Read more ...


STL/CLR, Compiler and Marshaling

MSDN第9频道又采访了Visual C++类库组的项目经理Nikola DudarSarita Bafna,以及质量控制组的Marina Polishchuk尽管Visual C++项目组已经转移了工作重点,但是很少人注意到这一点。或许这些采访可以帮助你了解Visual C++项目组的工作。 为什么C++仍旧重要?

Read more ...


Visual Studio 2005 Untrusted by IE7

Today I upgraded one of my development machine to IE7. Everything looks fine, except I have to change the FileDownload event handler to make my code compile.

Read more ...


PRB: ICustomDoc::SetUIHandler Causes Changes in Save As Dialog

For the description of this problem, see http://support.microsoft.com/kb/330441.

Read more ...


Microsoft MVP re-awarded again

亲爱的 Sheng Jiang, 热烈祝贺并欢迎您参与 Microsoft® MVP Program! 作为本年度“最有价值专家”(Most Valuable Professional) 奖的获奖者,您成为了我们精英群体中的一员,在全球网上和网下技术社区中与他人积极分享 Microsoft 的产品和技术。Microsoft 向所有用技术帮助他人发挥潜力,从而促进社区发展的 MVP 们表示崇高的敬意。要了解有关 MVP Program 的更多信息,请访问:www.microsoft.com/mvp。 非常感激您在过去的一年中在指导Visual Developer - Visual C++技术社区中的同伴方面所做的杰出贡献。 Another email:

Read more ...


How to use Visual C++ with Perl

Microsoft Visual C++ and later do not support perl scripts by default. That is, the Developer Studio does not associate any special significance to perl scripts without being informed otherwise. However, there are several viable options, namely custom build rules, which enable the creation of projects that depend directly upon perl scripts. The remainder of this article discusses the following three methods for adding perl script files to a Visual C++ project:

Read more ...