2017-10-12 8 views
0

J'ai une bibliothèque c + + et il a la capacité de le consommer sur l'environnement d'exécution de Windows.Bibliothèque statique recherchant le chemin d'accès .winmd

Je veux l'utiliser comme bibliothèque statique. Je l'ai configuré de cette façon et l'ai construit avec succès. J'ai également pu ajouter sa référence de projet à mon utilisation.

Mais quand je suis en train de construire le projet où je vais l'utiliser - Je reçois construire erreur:

pch.cpp : fatal error C1192: #using failed on 'D:..\mylib\mylib.winmd' 

Pourquoi est-il à la recherche d'un fichier .winmd? Il génère un fichier .lib. Qu'est-ce que je fais mal ici?

+0

Montrez-nous la ligne de code. – xMRi

+0

Le fichier .winmd est la bibliothèque de types du composant. Il joue exactement le même rôle qu'un fichier .h pour une bibliothèque normale, il contient les déclarations des types exposés par la bibliothèque. #using est l'équivalent de #include. Essayer de le transformer en une bibliothèque statique, hmm, cela devrait prendre un miracle ou trois. Je pense que vous devrez créer vos propres fonctions d'usine, celles qui sont maintenant générées automatiquement. * Ne le faites pas * est le seul bon conseil imo. –

+0

* "il a la possibilité de le consommer sur un environnement d'exécution Windows" * - Quelle est la fonctionnalité de cette bibliothèque? À ma connaissance, la seule possibilité pour une bibliothèque d'être consommée par une projection de langage Windows Runtime est un fichier .winmd. – IInspectable

Répondre

0

J'ai dû ajouter ci-dessous des éléments dans mon fichier .cxproj pour faire bibliothèque statique qui s'est ajoutée à mon UWP en tant que fichier .lib

<Keyword>StaticLibrary</Keyword> 
<AppContainerApplication>true</AppContainerApplication> 
<ApplicationType>Windows Store</ApplicationType>   
<WindowsTargetPlatformVersion>10.0.14393.0</WindowsTargetPlatformVersion>  
<WindowsTargetPlatformMinVersion>10.0.10586.0 
</WindowsTargetPlatformMinVersion> 
<ApplicationTypeRevision>10.0</ApplicationTypeRevision>  
<Link> 
    <SubSystem>Console</SubSystem> 
    <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries> 
    <GenerateWindowsMetadata>false</GenerateWindowsMetadata> 
</Link> 
-2

#using n'est pas la manière correcte de consommer une bibliothèque statique.

  1. Inclure les en-têtes dont vous avez besoin

  2. Ajoutez le fichier .lib aux options de liaison. Ou (mieux de mon point de vue) ajouter un #pragma comment(lib,...) au code source. Le fichier lib doit être dans un chemin que l'éditeur de liens recherche. Vous pouvez ajuster les chemins de l'éditeur de liens dans les paramètres de l'éditeur de liens.

Si vous faites référence à un composant .NET C++/CLR créé en tant que .DLL #using est correct.

+0

Je n'ai encore rien utilisé de la bibliothèque. Donc je pense que je n'ai pas besoin de l'en-tête maintenant. Je viens d'ajouter le projet de bibliothèque de ma liste de projets. Le fichier lib est là dans le répertoire. Mais pourquoi il continue à chercher .winmd. C'est supposé chercher .lib. –

+0

Windows Runtime n'est pas lié aux bibliothèques statiques ou .NET. Cette réponse ne répond pas à la question. – IInspectable