【发布时间】:2016-02-09 19:18:47
【问题描述】:
我有一个非托管的 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": 无法加载指定的模块 成立。 (异常形式 HRESULT:0x8007007E)。
我一直在阅读和测试一些不同的可能性:
- 将 dll 添加到与 exe 文件相同的路径
- 使用系统路径:C:\MyDLLs,并将 dll 放在这里。
- 将 dll 作为现有项添加到 vb 项目,并将属性设置为内容并始终复制。
这些都不起作用。有没有人对此有解决方案的想法?
【问题讨论】: