2013-04-08 44 views
1

我试图通过编写包装器从C#运行未托管的本机C++类代码。我的C++代码编译为静态库(.lib),没有问题。代码依赖于其他代码,我相信它们都被编译为静态库。由于链接器错误,我无法将其编译为DLL。C#用于C++的包装器,但只编译为静态库

我刚刚了解到,包装需要编译为DLL,以便它可以从C#中调用。这是真的?我能否将我的包装器编译为静态库以用于C#中?

+0

听起来像你在引用[P/Invoke](http://en.wikipedia.org/wiki/Platform_Invocation_Services)。据我所知,这只适用于DLL。如何用您的本地C++创建托管C++ DLL?这将允许直接在您的C#项目中添加引用并访问您的托管C++类。 – 2013-04-08 15:31:01

+1

我会建议您创建一个托管的C++ DLL。你有一个很好的教程,解释如何将未管理转换为管理? – 2013-04-08 15:38:08

+0

我曾经为Html Tidy创建了一个Managed C++ DLL。 [这是我的代码项目文章](http://www.codeproject.com/Articles/17124/A-managed-wrapper-for-the-HTML-Tidy-library),也许这对你有一些帮助。 – 2013-04-08 15:45:26

回答

0

C#无法加载.lib文件。

P/Invoke只能加载.DLL文件(它们不必被命名为.DLL,但它们必须是正确的文件格式)。