【发布时间】:2012-01-12 04:23:05
【问题描述】:
我有一个 vb6 项目,我在其中使用 dll 库来执行一些任务。为此,我添加了一个模块,该模块声明了该库的所有功能,例如:
Declare Function myFunction Lib "abcdapi.dll" (ByVal hVar1 As Long, ByVal hVar2 As Long) As Long
当我调用这个函数(以及许多其他类似函数)时,我能够完成这项工作并返回正确的 Long 指针。但是当我尝试通过 VB.net 做同样的事情时(通过使用 dllimport 导入相同的库并调用相同的函数),我没有得到任何结果。虽然它确实返回了一些指针,但不会产生正确的结果。
Private Const ABCD As String = "abcdapi.dll"
<DllImport(ABCD)>
Public Shared Function myFunction(ByVal hVar1 As IntPtr, ByVal hVar2 As IntPtr) As IntPtr
End Function
当我尝试调用上述函数时,它不起作用。我什至尝试使用该函数在我的 vb6 项目中创建一个 dll,并尝试使用 imports 关键字来调用该新 dll,但这也不起作用。可能是什么问题,我该如何解决。
【问题讨论】:
-
你能展示一些调用该函数的代码吗? vb.net的“它不起作用”如何?错误,错误的返回值,它是什么?
-
函数调用如下: ibOK = TM1ValBoolGet(hUser, voTemp) In VB.net:Declare Function TM1ValBoolGet Lib "tm1api.dll" (ByVal hUser As Long, ByVal vBool As Long) As Integer In vb.net:
Public Shared Function TM1ValBoolGet(ByVal hUser As IntPtr, ByVal vBool As IntPtr) As Integer End Function 我没有这个函数的代码,所以不确定其中发生了什么,但函数细节可以在这里看到:publib.boulder.ibm.com/infocenter/ctm1/v9r5m0/topic/… -
根据上面的ibm文档链接,如果一切正常,这个函数应该返回1,在vb6它返回1但在vb.net它返回91。我不知道为什么
-
请编辑您的帖子,而不是在评论中发布代码。该代码实际上是不可读的。
-
@ChrisDunaway 抱歉,事实证明这太难了。现场提到的帮助似乎不适用于我的系统。为了将文本格式化为代码,我按照建议留了 4 个空格,但没有用。然后我插入了 2 个空格来换行,没有用...我什至试图以速率符号写来通知以前的评论者,但这也没有出现在评论中。怎么了,我不知道,我读错了或者压力太大了..我不知道。
标签: vb.net vb6 interop pinvoke