0

我是 Visual C++、.NET 和 Windows 编程世界(来自 Objective-C/Cocoa)的新手,我正在尝试使用我编译为 .lib 的 CFLite(Open CoreFoundation Lite)库文件。它是用纯非托管 C 语言编写的,我想在我的托管 CLR .NET 应用程序中使用它。当我尝试链接它并使用函数 CFSTR(__CFStringMakeConstantString 的快捷方式)时,它严重失败。有什么建议吗?附上错误。

Proj.obj : error LNK2031: unable to generate p/invoke for "extern "C" struct __CFString const * __clrcall __CFStringMakeConstantString(char const *)" (?__CFStringMakeConstantString@@$$J0YMPBU__CFString@@PBD@Z); 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 *)" (?__CFStringMakeConstantString@@$$J0YMPBU__CFString@@PBD@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)
Proj.obj : error LNK2019: unresolved external symbol "extern "C" struct __CFString const * __clrcall __CFStringMakeConstantString(char const *)" (?__CFStringMakeConstantString@@$$J0YMPBU__CFString@@PBD@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)

更新:我最终只使用了带有 Win32 调用的本机应用程序,因为无论如何我的用户界面都将是最小的(它是一个后台应用程序)。我玩了一下 p/invoke,对于像我这样的新手来说,这似乎很复杂:p 谢谢!

4

3 回答 3

1

http://www.codeproject.com/KB/mcpp/timeserver.aspx

于 2009-05-24T23:06:08.780 回答
1

与 C 库中的函数签名相比,您在托管 C++ 应用程序中使用的函数签名看起来不匹配。

.Net 用于在托管世界和非托管世界之间进行通信的技术是 PInvoke。有关如何使用 PInvoke 的示例的最佳资源是pinvoke.net。您的 C 函数签名看起来非常简单,因此使用正确编组的参数在 C++ 中创建匹配的函数签名应该很简单。

于 2009-05-24T23:46:19.107 回答
0

我知道使用非托管托管代码的方法是构建一个 DLL 或使用 COM。

于 2009-05-24T23:14:08.390 回答