事实上,我得到了一个C++(工作)DLL,我想导入我的C#项目来调用它的函数.
当我指定DLL的完整路径时,它确实有效,如下所示:
string str = "C:\\Users\\userName\\AppData\\Local\\myLibFolder\\myDLL.dll";
[DllImport(str, CallingConvention = CallingConvention.Cdecl)]
public static extern int DLLFunction(int Number1, int Number2);
Run Code Online (Sandbox Code Playgroud)
问题是它将是一个可安装的项目,因此用户的文件夹将不同(例如:皮埃尔,保罗,杰克,妈妈,爸爸......),这取决于计算机/会话的运行情况.
所以我希望我的代码更通用,如下所示:
/*
goes right to the temp folder of the user
"C:\\Users\\userName\\AppData\\Local\\temp"
then go to parent folder
"C:\\Users\\userName\\AppData\\Local"
and finally go to the DLL's folder
"C:\\Users\\userName\\AppData\\Local\\temp\\myLibFolder"
*/
string str = Path.GetTempPath() + "..\\myLibFolder\\myDLL.dll";
[DllImport(str, CallingConvention = CallingConvention.Cdecl)]
public static extern int DLLFunction(int Number1, int Number2);
Run Code Online (Sandbox Code Playgroud)
最重要的是"DllImport"需要DLL目录的"const string"参数.
所以我的问题是::在这种情况下可以做些什么?
我开发了一个依赖于DLL文件的应用程序.当我调试我的应用程序时,应用程序会抱怨:
"此应用程序无法启动,因为找不到xxx.dll."
所以我必须将DLL文件复制到与我的.vcproj文件相同的目录中.
有没有办法设置项目在(最好)一些相对路径或(不是首选)某些绝对路径中查找DLL文件?
与我们如何在项目设置中设置包含和库路径的概念类似.
我的意思是当我调试我的应用程序(点击F5)时会弹出上面的错误.
如何在Visual Studio中为特定项目设置要搜索的DLL文件的路径?
现在我在环境path变量中设置它,但我想更好地控制它.
我有C++经验但不是MSVC.
我想要做的是将来自开源项目的.dll合并到我的项目中.代码可用,我已经构建了它.我有.dll以及.lib,据我所知它是C++项目所必需的.
现在很遗憾没有简单的"添加引用",将我的.dll放入include目录并将其添加到我的解决方案中.我编辑了项目属性页面,C/C++ Additional Include Directories选项以及添加.lib作为附加链接器依赖项.我在解决方案树中为dll和lib创建了一个include目录.
我的问题是当我尝试从文档中包含头文件时,VS输出会发出错误消息.现在我意识到我正在使用dll/lib组合,并且我的解决方案中没有.h文件,所以如何添加正确的包含?我正在使用QT工具包,但是我如何从开源库中添加其他头文件/ dll使我失望.
有人可以指出我正确的方向.
一个奇怪的错误:
错误MSB8011:无法注册输出.请尝试启用每用户重定向或使用提升的权限从命令提示符注册该组件.C:\ Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets 744
尝试在ActiveX控件中使用OpenSceneGraph(OSG)时出现此错误.谷歌搜索显示各种解决方案并没有真正解决问题或找到错误的确切原因,所以我想把解决方案放在一个地方:这里.
我找到了它的解决方案,并将很快回答我自己的问题,以便人们可以找到他们遇到相同问题的解决方案.