I have a WinRT class (C++/CX ref class) in my Win32-based desktop app. It accesses WinRT APIs and works just fine. I used this guide to get it working. Now I'm trying to put this class in a library that the desktop app can use. I'm having quite a bit of trouble with this. Here's what I did in Visual Studio 2013:
- Created a new project by selecting Installed > Templates> Visual C++ > Store Apps > Windows Apps > DLL (Windows).
- Added this new DLL project to the solution containing my desktop app.
- Added a reference to the DLL project
- In Configuration Properties > C/C++ > General > Additional #using Directories I added the directory where the .winmd file gets built by the DLL project.
- In a .cpp file in the desktop app, I added:
#using <MyLib.winmd>
#using <Windows.winmd>
#using <Platform.winmd>
[MTAThread] // initializes WinRT runtime
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPTSTR lpCmdLine,
_In_ int nCmdShow) {
MyWinRTClass^ myObject = ref new MyWinRTClass();
}
Intellisense works and I wrote code to instantiate the class from the library. The desktop app builds, but when it runs I get:
First-chance exception at 0x76494598 in MyDesktopApp.exe: Microsoft C++ exception: Platform::ClassNotRegisteredException ^ at memory location 0x00A8F99C.
What's going on? Is this the right approach?