无法将Visual Studio生成的C ++ DLL导入Windows上的Visual Studio C#项目

时间:2013-04-10 00:00:50

标签: c# c++ video dll reference

我一直在尝试监控视频内存以获得高性能密集型程序。

所以我在C ++ Visual Studio应用程序中使用了NVIDIA CUDA库来收集我需要的数据。

不幸的是,我需要一个可以与Ruby,C#和我公司的软件测试工具一起使用的软件包。

所以我决定编译一个C ++ DLL并将其导入C#Visual Studio项目进行测试。

我能够编译DLL但是将它导入我的Visual C#程序是一个问题。

我右键点击参考文献 - >添加参考。然后我单击Browse选项卡并浏览到我的DLL的位置; “TestProgram.dll”,然后点击“确定”

然后我收到以下错误消息“无法添加对C:....的引用。请确保该文件是可访问的,并且它是有效的程序集或COM组件。”

到目前为止我尝试了什么: 1.从我系统上的几个不同位置导入DLL。 2.将DLL移动到我的解决方案资源管理器中并导入它 3.使用“调用”方法:[DllImport(“PathToMyDll”)] 4.使用“调用”方法只使用我的dll名称。 5.键入我的DLL的“使用”路径 6.将dll导出为.lib文件而不是

我做错了什么?我想如果我使用Visual Studio 2010导出DLL,那么肯定可以将相同的DLL添加到Visual Studio 2010项目中。

2 个答案:

答案 0 :(得分:1)

那么,它是一个有效的汇编或COM组件吗?仅仅因为它是一个C ++ DLL并不意味着它只能用于引用,事实上,大多数都不能。它需要是托管DLL或COM对象。如果不是那些,那么您必须从托管程序集调用非托管代码。这意味着在存根中定义每个函数。

此处有更多信息:how to call a C++ dll exported function from c#

请注意,您还必须处理64/32位问题,因为如果DLL编​​译为32位,则无法在64位应用程序中使用它。

答案 1 :(得分:0)

我找到了解决这个问题的方法。 CUDA创建一个Windows控制台应用程序项目。所以解决方案就是使用它而不是DLL。

这很有效,因为Ruby,Test Complete和Visual C#可以读取基本.exe控制台程序的输出(有一些工作)。

编译的exe很简单。我需要做的就是在启动程序时传入一个整数作为参数,程序将从我的NVIDIA卡中获取所需的数据。

现在的挑战是找到一种与.exe接口的好方法。