【发布时间】:2025-11-21 15:40:02
【问题描述】:
背景:
- C++(没有库/DLL(第 3 方)和调用它们的 C++ 代码)作为 C# 调用的 Dll工作。
- C++(带有库/Dlls(第 3 方)和使用它们的 C++ 代码)作为 C++ 调用的 Dll工作。
- C++(带有库/Dlls(第 3 方)和使用它们的 C++ 代码)作为 C# 调用的 Dll不工作。
我遇到了第三种情况的 Dll not found 异常。 我只是在评论/取消评论我的代码以包含或排除我的 C++ Dll 的 Dll 和库,因此据说可以找到 Dll
- 第 3 方 Dll 和库是为 C++ 使用的,实际上是 tesseract OCR。
问题总结:
第一种情况表明我的 Dll 路径是正确的,并且可以找到 dll 并且设置正确,因此我可以通过 C# 使用 C++ dll。
第二种情况表明我的 Dll 本身没有错误。
第三种情况与第一种和第二种情况相矛盾。
请赐教,一百万提前谢谢!
P.S.:我没有包含代码,因为我不确定问题是否显而易见(对您来说是专业人士)。如果不是,我可以进行编辑以包含最少的示例代码。
更新 1:
参考建议的解决方案,我尝试将每个依赖项放在 1 个文件夹下,但它不起作用。很可能是我做错了。
以下是我的 Dll 的设置(我没有足够的声誉在此处发布图片,因此这是链接)。
http://postimg.org/image/v4cau3b2d/
您能否建议如何构建“依赖文件夹”以便 C# 可以找到它?
更新 2:
发现库可以定位,但在实例化类之一(第 3 方)时失败,
class TESS_API TessBaseAPI {
public:
TessBaseAPI();// failed here, why?
}
显然我们需要做this!
状态: 使用了替代方法(由一些慷慨和有才华的人包装的 tesseract,即 3rd 方类可以直接在 C# 中使用)。在生活中进行。有时间会尝试解决这个问题。
【问题讨论】:
-
Libraries和DLLs是相同的(DLL = 动态链接库),所以请澄清你的问题......你不能拥有(如第 1 点):“C++ without库,但带有 dll" -
好的,为了正确起见,.lib 文件是静态链接库。同样适用...通常当有一个小的 .lib 文件和一个 DLL 时,.lib 只是 DLL 中外部函数的定义,但是你有两个库,而不仅仅是一个(它不像“如果链接动态它不是一个库")
-
.lib 文件用于静态链接(例如,它们的内容在您的 dll 中编译),因此如果您有具有相同代码的 dll,则不必将 .lib 文件放在输出中。