2014-03-05 17 views
0

更新1:如何引用.INL和.h文件在C#

我想知道我是否可以参考到的.lib文件,但似乎我不能。 如果这是真的,并且我没有C++项目的源代码,我该如何使用它的方法? 顺便说一句,我正在使用FastCV库。


我遇到,我需要调用从C#代码C++方法的情况。 的C++生成的文件结构:

lib 
--libfastcv.lib 
--vc120.pdb inc 
--fastcv.h 
--fastcv.inl 
--stdint.h 

我知道如何调用C++方法从C#:

[DllImport("libfastcv.lib",CallingConvention=CallingConvention.Cdecl)] 
public static extern <ReturnType> <MethodName>(<Parameters>); 

但是我觉得h和.INL文件需要被包含在我的C#项目作为好。 那么如何包含它们呢?

非常感谢。

+1

听起来你完全混淆了C++及其编译器/链接器部分和.NET世界的概念。 –

+2

这是不可能的,C#编译器不知道如何解析C或C++声明。您可以改为使用C++/CLI项目。 –

+0

嗨,大家好,谢谢你的回复。我可以参考.lib文件吗? – Franva

回答

0

你不必做任何包括。 DLLImport应该足够了。

要查看你可以导入你可以使用DependencyWalker或我最喜欢的工具CFF Explorer

我经常用,我需要在头文件中定义的一些常量任何WINAPI功能的方法。我总是不得不在C#代码中定义它们,因此无法“导入”它们。

+0

嗨,谢谢你的回复。当我试图包含.lib文件时,Dialog阻止我通过仅显示.dll文件来完成此操作。 – Franva

2

他们没有。相反,您需要在您自己的代码中构建/使用二进制兼容类型,并使用它们。 (并且,您从dll导入方法,而不是从lib)。

+0

嗨Shioml,是的,我想知道我真的可以参考.lib文件。但是,我没有C++代码,所以我如何使用C++方法?我使用的框架是用C++编写的FastCV。 – Franva

+0

这里有两种选择:1.您使用的框架在dll中具有这些功能,并且lib仅包含链接这些功能的代码。在这种情况下,您只需要知道这些函数的名称和签名以及它们驻留在哪个dll中。 –

+0

2.您正在使用的框架在libs本身中具有这些函数。在这种情况下,你将不得不编写C++ dll,这将暴露他们(然后你可以导入该dll),或者编写C++/CLI dll,它将调用这些函数包装在托管代码中那么你就可以添加该dll作为你的C#项目的参考,并直接使用它)。 –