Is there an advantage to authoring classic COM components versus windows runtime classes?












0















My goal is to author a component that is callable from a C# application. The component in question contains DX12 code as well as some xaml code that I authored in a C++/WinRT project. I want to extract that code to put it inside a component. I see that there is two different ways to do this:



1) Authoring a classic COM component as described here:
https://docs.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/author-coclasses



2) Authoring a windows runtime class as described here:
https://docs.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/author-apis



What are the reasons somebody would choose option #1 instead of #2?










share|improve this question


















  • 2





    It just is not very arbitrary, whether you intend the client code to target the legacy desktop or UWP is a pretty big deal to the client programmer. But if you develop the component with C++/WinRT and xaml then there is no choice, the client programmer must target UWP and only 2) qualifies.

    – Hans Passant
    Nov 20 '18 at 15:07






  • 1





    You are reading something into the documentation, that's not there. It's possible to use the C++/WinRT library to implement COM classes (that don't have the additional 3 IInspectable interface methods). This doesn't mean that COM and the Windows Runtime can be used interchangeably. They are different platforms. You need to know, which one you want to target. Since you are using XAML, it's pretty much a given, that you cannot use classic COM to expose your interfaces (unless you want to go down the XAML islands route).

    – IInspectable
    Nov 20 '18 at 16:51
















0















My goal is to author a component that is callable from a C# application. The component in question contains DX12 code as well as some xaml code that I authored in a C++/WinRT project. I want to extract that code to put it inside a component. I see that there is two different ways to do this:



1) Authoring a classic COM component as described here:
https://docs.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/author-coclasses



2) Authoring a windows runtime class as described here:
https://docs.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/author-apis



What are the reasons somebody would choose option #1 instead of #2?










share|improve this question


















  • 2





    It just is not very arbitrary, whether you intend the client code to target the legacy desktop or UWP is a pretty big deal to the client programmer. But if you develop the component with C++/WinRT and xaml then there is no choice, the client programmer must target UWP and only 2) qualifies.

    – Hans Passant
    Nov 20 '18 at 15:07






  • 1





    You are reading something into the documentation, that's not there. It's possible to use the C++/WinRT library to implement COM classes (that don't have the additional 3 IInspectable interface methods). This doesn't mean that COM and the Windows Runtime can be used interchangeably. They are different platforms. You need to know, which one you want to target. Since you are using XAML, it's pretty much a given, that you cannot use classic COM to expose your interfaces (unless you want to go down the XAML islands route).

    – IInspectable
    Nov 20 '18 at 16:51














0












0








0








My goal is to author a component that is callable from a C# application. The component in question contains DX12 code as well as some xaml code that I authored in a C++/WinRT project. I want to extract that code to put it inside a component. I see that there is two different ways to do this:



1) Authoring a classic COM component as described here:
https://docs.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/author-coclasses



2) Authoring a windows runtime class as described here:
https://docs.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/author-apis



What are the reasons somebody would choose option #1 instead of #2?










share|improve this question














My goal is to author a component that is callable from a C# application. The component in question contains DX12 code as well as some xaml code that I authored in a C++/WinRT project. I want to extract that code to put it inside a component. I see that there is two different ways to do this:



1) Authoring a classic COM component as described here:
https://docs.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/author-coclasses



2) Authoring a windows runtime class as described here:
https://docs.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/author-apis



What are the reasons somebody would choose option #1 instead of #2?







uwp com c++-winrt






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 20 '18 at 14:52









mblmbl

5917




5917








  • 2





    It just is not very arbitrary, whether you intend the client code to target the legacy desktop or UWP is a pretty big deal to the client programmer. But if you develop the component with C++/WinRT and xaml then there is no choice, the client programmer must target UWP and only 2) qualifies.

    – Hans Passant
    Nov 20 '18 at 15:07






  • 1





    You are reading something into the documentation, that's not there. It's possible to use the C++/WinRT library to implement COM classes (that don't have the additional 3 IInspectable interface methods). This doesn't mean that COM and the Windows Runtime can be used interchangeably. They are different platforms. You need to know, which one you want to target. Since you are using XAML, it's pretty much a given, that you cannot use classic COM to expose your interfaces (unless you want to go down the XAML islands route).

    – IInspectable
    Nov 20 '18 at 16:51














  • 2





    It just is not very arbitrary, whether you intend the client code to target the legacy desktop or UWP is a pretty big deal to the client programmer. But if you develop the component with C++/WinRT and xaml then there is no choice, the client programmer must target UWP and only 2) qualifies.

    – Hans Passant
    Nov 20 '18 at 15:07






  • 1





    You are reading something into the documentation, that's not there. It's possible to use the C++/WinRT library to implement COM classes (that don't have the additional 3 IInspectable interface methods). This doesn't mean that COM and the Windows Runtime can be used interchangeably. They are different platforms. You need to know, which one you want to target. Since you are using XAML, it's pretty much a given, that you cannot use classic COM to expose your interfaces (unless you want to go down the XAML islands route).

    – IInspectable
    Nov 20 '18 at 16:51








2




2





It just is not very arbitrary, whether you intend the client code to target the legacy desktop or UWP is a pretty big deal to the client programmer. But if you develop the component with C++/WinRT and xaml then there is no choice, the client programmer must target UWP and only 2) qualifies.

– Hans Passant
Nov 20 '18 at 15:07





It just is not very arbitrary, whether you intend the client code to target the legacy desktop or UWP is a pretty big deal to the client programmer. But if you develop the component with C++/WinRT and xaml then there is no choice, the client programmer must target UWP and only 2) qualifies.

– Hans Passant
Nov 20 '18 at 15:07




1




1





You are reading something into the documentation, that's not there. It's possible to use the C++/WinRT library to implement COM classes (that don't have the additional 3 IInspectable interface methods). This doesn't mean that COM and the Windows Runtime can be used interchangeably. They are different platforms. You need to know, which one you want to target. Since you are using XAML, it's pretty much a given, that you cannot use classic COM to expose your interfaces (unless you want to go down the XAML islands route).

– IInspectable
Nov 20 '18 at 16:51





You are reading something into the documentation, that's not there. It's possible to use the C++/WinRT library to implement COM classes (that don't have the additional 3 IInspectable interface methods). This doesn't mean that COM and the Windows Runtime can be used interchangeably. They are different platforms. You need to know, which one you want to target. Since you are using XAML, it's pretty much a given, that you cannot use classic COM to expose your interfaces (unless you want to go down the XAML islands route).

– IInspectable
Nov 20 '18 at 16:51












0






active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53395653%2fis-there-an-advantage-to-authoring-classic-com-components-versus-windows-runtime%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53395653%2fis-there-an-advantage-to-authoring-classic-com-components-versus-windows-runtime%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

The term 'EXEC' is not recognized as the name of a cmdlet Powershell

NPM command prompt closes immediately [closed]

Error binding properties and functions in emscripten