2009-05-24 5 views
0

Je suis nouveau sur Visual C++, .NET et le monde de la programmation Windows (venant d'Objective-C/Cocoa), et j'essaie d'utiliser le CFLite (Open CoreFoundation Lite), que j'ai compilé dans un fichier .lib. Il est écrit en C pur et non géré, et j'aimerais l'utiliser dans mon application CLR .NET gérée. Lorsque j'essaie de lier et d'utiliser la fonction CFSTR, qui est un raccourci pour __CFStringMakeConstantString, il échoue horriblement. Aucun conseil? Attaché est l'erreur.Liaison de code non-CLR à l'application .NET

Proj.obj : error LNK2031: unable to generate p/invoke for "extern "C" struct __CFString const * __clrcall __CFStringMakeConstantString(char const *)" ([email protected]@[email protected]@[email protected]); calling convention missing in metadata 
Proj.obj : warning LNK4248: unresolved typeref token (01000016) for '__CFString'; image may not run 
Proj.obj : error LNK2028: unresolved token (0A00000B) "extern "C" struct __CFString const * __clrcall __CFStringMakeConstantString(char const *)" ([email protected]@[email protected]@[email protected]) referenced in function "int __clrcall main(cli::array<class System::String^>^)" ([email protected]@[email protected]@@@Z) 
Proj.obj : error LNK2019: unresolved external symbol "extern "C" struct __CFString const * __clrcall __CFStringMakeConstantString(char const *)" ([email protected]@[email protected]@[email protected]) referenced in function "int __clrcall main(cli::array<class System::String^>^)" ([email protected]@[email protected]@@@Z) 

MISE À JOUR: J'ai fini par aller juste avec une application native avec des appels Win32, depuis mon interface utilisateur va être minime quand même (il est une application de fond). J'ai joué un peu avec p/invoke un peu, et cela a semblé compliqué pour un débutant comme moi: p Merci!

Répondre

1

Il semble que vous ayez une différence dans la signature de fonction que vous utilisez dans votre application C++ gérée par rapport à celle de votre bibliothèque C.

La technologie .Net utilise pour communiquer entre le monde géré et le monde non géré est PInvoke. La meilleure ressource pour des exemples d'utilisation de PInvoke est pinvoke.net. Les signatures de votre fonction C semblent très simples, il devrait donc être simple de créer la correspondance en C++ avec les paramètres correctement gérés.

0

Les moyens que je connais de travailler avec le code managé de non géré est de construire une DLL ou de travailler avec COM.

Questions connexes