我一直在尝试监控视频内存以获得高性能密集型程序。
所以我在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项目中。
答案 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接口的好方法。