非托管c++;vb中的动态链接库 我有一个非托管C++ DLL(我的创建),它具有一组输入变量(标量和数组)和输出数组的函数。 我想从VisualBasic程序中调用它。我有一个简单的表单+一个按钮,当单击时调用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 模块MyDLLModule 公共功能乐趣(ByVal var1为双功能_ ByVal var2为双精度_ ByRef arr1()作为双精度_ ByRef arr2()作为双精度_ ByRef arr3()作为双精度_ ByVal var3为双精度_ ByVal var4为双倍_ ByVal var5为双倍_ ByVal var6为双精度_ ByVal var7为双倍_ ByVal var8为双倍_ ByVal var9作为双倍_ ByVal var10为双精度_ ByVal var11作为整数_ ByRef arr4()作为双精度_ ByRef arrout()为双精度)为整数 端函数 端模块

非托管c++;vb中的动态链接库 我有一个非托管C++ DLL(我的创建),它具有一组输入变量(标量和数组)和输出数组的函数。 我想从VisualBasic程序中调用它。我有一个简单的表单+一个按钮,当单击时调用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 模块MyDLLModule 公共功能乐趣(ByVal var1为双功能_ ByVal var2为双精度_ ByRef arr1()作为双精度_ ByRef arr2()作为双精度_ ByRef arr3()作为双精度_ ByVal var3为双精度_ ByVal var4为双倍_ ByVal var5为双倍_ ByVal var6为双精度_ ByVal var7为双倍_ ByVal var8为双倍_ ByVal var9作为双倍_ ByVal var10为双精度_ ByVal var11作为整数_ ByRef arr4()作为双精度_ ByRef arrout()为双精度)为整数 端函数 端模块,c++,vb.net,dll,unmanaged,C++,Vb.net,Dll,Unmanaged,它以后将与任何其他函数一样使用 无论是在MSV中调试还是在运行应用程序时,这一切都在我开发的机器上运行良好。但是,当我将所有文件移动到另一台计算机时,当单击按钮调用dll时,它会抱怨: 无法加载L DLL“mydll.DLL”:无法加载指定的模块 已找到。(异常表单HRESULT:0x8007007E) 我一直在阅读和测试一些不同的可能性: 将dll添加到与exe文件相同的路径 使用系统路径:C:\mydll,并将dll放在此处 将dll作为现有项添加到vb项目中,并将属性设置为内容并始终复制

它以后将与任何其他函数一样使用

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

无法加载L DLL“mydll.DLL”:无法加载指定的模块 已找到。(异常表单HRESULT:0x8007007E)

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

  • 将dll添加到与exe文件相同的路径
  • 使用系统路径:C:\mydll,并将dll放在此处
  • 将dll作为现有项添加到vb项目中,并将属性设置为内容并始终复制
  • 这些都不管用。有人有办法解决这个问题吗?

    建议:

    请尝试在.dll上运行dependens.exe或dumpbin.exe,以查看它可能具有哪些依赖项

  • 您是正确的:路径是您需要查看的第一项内容。如果所有其他操作都失败,请将.dll复制到\windows\system32(至少用于调试目的)

  • 否则,您的.dll可能依赖于“其他东西”。例如特定的MSVC运行时。“依赖”(GUI)或“转储文件”(cmd行)应该告诉您

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

  • 附言:

  • 您可以从“MSVS开发者命令提示符”运行dumpbin

  • 您可以键入
    dumpbin/?
    查看选项。您需要
    dumpbin/dependents mydll.dll

  • 如果您需要MSVC运行时,可以在此处下载:


  • 多亏了paulsm4:msvc运行时似乎是个问题。在编译mydll.dll时使用/MT标志(据我所知是静态链接)解决了这个问题