从vb调用非托管c++dll中的函数
Call function in unmanaged c++ dll from vb
我有一个非托管的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:时,它会抱怨
无法加载DLL"mydll.DLL":指定的模块无法建立(异常形式HRESULT:0x8007007E)。
我一直在阅读和测试一些不同的可能性:
- 将dll添加到与exe文件相同的路径
- 使用系统路径:C:\MyDLL,并将dll放在此处
- 将dll作为现有项添加到vb项目中,并将属性设置为内容和始终复制
这些都不起作用。有人有解决这个问题的办法吗?
建议:
请尝试在.dll上运行dependens.exe或dumpbin.exe,以查看它可能具有哪些依赖项。
-
你是对的:PATH是你需要看的第一件事。如果其他一切都失败了,请将.dll复制到\windows\system32(至少出于调试目的)。
-
否则,你的.dll可能依赖于"其他东西"。例如特定的MSVC运行时。"dependents"(GUI)或"dumpbin"(cmd行)应该告诉您。
-
我假设你的.dll不是COM/ActiveX.dll,问题是你还没有注册。坦率地说,这也值得仔细检查。
PS:
-
您可以从"MSVS开发人员命令提示符"运行dumpbin。
-
您可以键入
dumpbin /?
以查看选项。您需要dumpbin /dependents mydll.dll
。 -
如果你需要MSVC运行时,你可以在这里下载:
https://www.microsoft.com/en-us/download/details.aspx?id=48145
多亏了paulsm4:msvc运行时似乎是个问题。在编译mydll.dll时使用/MT标志(据我所知是静态链接)解决了这个问题。
- Visual c ++,使用字符串引用/指针调用 dll 函数
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 调用 "project" 函数和调用 DLL 函数之间的区别
- 代码在 msvcrt .dll函数上设置断点失败
- VB.NET DLL中的C++DLL函数复制
- 在python-ctypes中声明变量并传递给dll函数
- 从 Python 调用 Windows DLL 函数时出错
- 调用 dll 函数时"Run-Time Check Failure #0 - The value of ESP"
- 列出 C# 中的 non-.NET DLL 函数
- 基本 DLL 函数
- 如何在不可修改的源代码中使用 DLL 函数?
- 对需要双精度数组和结构作为输入C++ DLL 函数的 C# 调用
- WScript.CreateObject 在调用 C++ COM dll 函数时返回空
- 如何在 lua cpp 模块中调用托管 c++ dll 函数
- 测试C++ DLL 函数
- 从 C# GUI 将 char * 参数传递给C++ dll 函数
- 使用指针调用C++ DLL 函数
- 在C++中导入 DLL 函数
- #VALUE!在 64 位 Excel 中调用 DLL 函数 (C++) 时
- 如何从 UWP 应用调用"libheif.dll"函数