Question

Je veux écrire une bibliothèque en utilisant la syntaxe C ++ / CX et l'utiliser dans d'autres projets.

Comme vous le savez, les anciennes structures de données simples ne peuvent avoir aucune méthode ou opérateur, nous avons donc dû faire des choses comme écrire des méthodes statiques dans une autre classe pour fournir un comportement.

Nous ne pouvons pas non plus écrire de code comme celui-ci:

private:
    int _D;
public:
    property int& D { int& get() {return _D;}}

ou transmettez cette propriété à des méthodes comme celle-ci:

void SampleMethod(int& d);

Je ne sais pas pourquoi la bibliothèque d'exécution Windows a ces restrictions.

Comment puis-je compiler les extensions C ++ / CX et Windows Runtime dans un fichier .lib?Ou comment précompiler l'ensemble des fichiers de code du projet WRL dans un autre projet?

Était-ce utile?

La solution

WinRT est un ABI destiné à une utilisation multilingue - au moins C ++, C #, VB et JS.Pour cette raison, les constructions qu'il fournit sont limitées à ce qui peut être représenté dans ces langages de manière simple - par exemple, si vous retournez par référence, comment le code C # l'utiliserait-il?

Si vous voulez écrire une bibliothèque statique en C ++ pour une consommation uniquement à partir de C ++, mon conseil serait d'éviter les extensions de langage dans la mesure du possible, et de ne les conserver que pour les endroits où vous devez passer des objets WinRT.Il n'y a aucun avantage que vous tirerez dans ce scénario du passage à C ++ / CX complet.

Autres conseils

Contrairement au C ++, où une "struct" est essentiellement "une classe dont tous les membres sont publics", dans le runtime de Windows, une "struct" est un type valeur.En tant que tel, il ne peut avoir aucune méthode, y compris des accesseurs de propriété (les types valeur ne peuvent pas avoir de méthodes).

De plus, comme les structures sont des types valeur, elles sont toujours passées par valeur.Cela signifie que passer une structure dans une méthode nécessite de copier le contenu de la structure (un type valeur implique que chaque consommateur opère sur sa propre copie du type de données).En conséquence, les structures doivent être de taille assez petite (pensez "moins de 16 octets").

Si vous avez besoin de faire circuler des objets plus gros, utilisez plutôt une classe - les classes sont passées par référence et peuvent donc contenir n'importe quelle quantité de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top