gpt4 book ai didi

c++ - 从 vb 调用非托管 c++ dll 中的函数

转载 作者:搜寻专家 更新时间:2023-10-31 02:19:19 26 4
gpt4 key购买 nike

我有一个非托管的 c++ dll(我创建的),它有一个带有一堆输入变量(标量和数组)和输出数组的函数。我想从 visual basic 程序中调用它。我有一个简单的表单 + 一个按钮,单击时调用 dll 中的函数。在vb文件中导入如下:

Module MyDLLModule
<DllImport("mydll.dll", CallingConvention:=CallingConvention.StdCall, CharSet:=CharSet.Ansi)> Public Function fun(ByVal var1 As Double, _
ByVal var2 As Double, _
<MarshalAs(UnmanagedType.SafeArray)> ByRef arr1() As Double, _
<MarshalAs(UnmanagedType.SafeArray)> ByRef arr2() As Double, _
<MarshalAs(UnmanagedType.SafeArray)> ByRef arr3() As Double, _
ByVal var3 As Double, _
ByVal var4 As Double, _
ByVal var5 As Double, _
ByVal var6 As Double, _
ByVal var7 As Double, _
ByVal var8 As Double, _
ByVal var9 As Double, _
ByVal var10 As Double, _
ByVal var11 As Integer, _
<MarshalAs(UnmanagedType.SafeArray)> ByRef arr4() As Double, _
<MarshalAs(UnmanagedType.SafeArray)> ByRef arrout() As Double) As Integer

End Function
End Module

它稍后会像任何其他函数一样被使用。

无论是在 MSVS 中调试还是在运行应用程序时,这一切在我开发的机器上都运行良好。但是当我将所有文件移动到另一台计算机时,它会在单击按钮调用 dll 时提示:

"Unable to loadl DLL "mydll.dll": The specified module could not be found. (Exception form HRESULT: 0x8007007E).

我一直在阅读和测试一些不同的可能性:

  1. 将dll添加到与exe文件相同的路径
  2. 使用系统路径:C:\MyDLLs,并将 dll 放在这里。
  3. 将 dll 作为现有项添加到 vb 项目并将属性设置为内容并始终复制。

这些都不起作用。有没有人有解决这个问题的想法?

最佳答案

建议:

尝试在您的 .dll 上运行 depends.exe 或 dumpbin.exe 以查看它可能具有哪些依赖项。

  1. 您是对的:PATH 是您需要查看的第一件事。如果所有其他方法均失败,则将您的 .dll 复制到\windows\system32(至少用于调试目的)。

  2. 否则,您的 .dll 可能依赖于“其他东西”。例如特定的 MSVC 运行时。 “depends”(GUI)或“dumpbin”(cmd 行)_ 应该会告诉您。

  3. 我假设您的 .dll 不是 COM/ActiveX .dll,问题是您还没有注册它。坦率地说,这也值得仔细检查。

附言:

  1. 您可以从“MSVS 开发人员命令提示符”运行 dumpbin。

  2. 您可以键入 dumpbin/? 来查看选项。你想要 dumpbin/dependents mydll.dll

  3. 如果您需要 MSVC 运行时,可以在这里下载:

https://www.microsoft.com/en-us/download/details.aspx?id=48145

关于c++ - 从 vb 调用非托管 c++ dll 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33604141/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com