Is there an advantage to authoring classic COM components versus windows runtime classes?
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
add a comment |
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
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 3IInspectableinterface 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
add a comment |
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
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
uwp com c++-winrt
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 3IInspectableinterface 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
add a comment |
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 3IInspectableinterface 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
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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

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
IInspectableinterface 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