2012-01-12 54 views
0

我有一个vb6项目,我在其中使用DLL库做一些任务。对于这一点,我想补充它声明,如该库的所有功能模块:从VB.net项目调用VB6原生dll问题项目

Declare Function myFunction Lib "abcdapi.dll" (ByVal hVar1 As Long, ByVal hVar2 As Long) As 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,但这也不起作用。有什么可能是这个问题,我如何使它工作。

+0

你可以显示一些调用函数的代码吗? vb.net如何“不起作用”?错误,错误的返回值,它是什么? – MarkJ 2012-01-12 07:40:09

+0

函数调用低于: – Rahul 2012-01-12 09:16:46

+0

函数调用低于: ibOK = TM1ValBoolGet(hUser,voTemp) 在VB.net:Declare功能TM1ValBoolGet库 “tm1api.dll”(BYVAL hUser只要,BYVAL vBool只要)作为整数 在vb.net: <的DllImport(TM1APIDLL)>公共共享功能TM1ValBoolGet(BYVAL hUser作为IntPtr的,BYVAL vBool作为IntPtr的)作为整数 端功能 我没有这个功能的代码,所以不知道是什么发生在它,但功能的细节可以在这里看到: http://publib.boulder.ibm.com/infocenter/ctm1/v9r5m0/topic/com.ibm.swg.im.cognos.tm1_api.9.5.2.doc /tm1_api_id14631tm1func_tm1valboolget.html – Rahul 2012-01-12 09:24:31

回答

1

的Docos的你引用显示:

TM1IMPORT TM1_BOOL TM1API TM1ValBoolGet(TM1U hUser, TM1V vBool); 

难道TM1U和TM1V被定义为API的32位数据类型和您在64位机器上运行.NET代码,使您的IntPtr是一个64位的数据类型? (如果API带有C头文件,您可以看到如何定义这些数据类型)。尝试将.NET代码重新编译为“x86”并再次尝试。

我只是从上面您的评论复制此代码:

函数调用低于:

ibOK = TM1ValBoolGet(hUser, voTemp) 

在VB.net:< < <我这里假设你的意思VB6

Declare Function TM1ValBoolGet Lib "tm1api.dll" (ByVal hUser As Long, ByVal vBool As Long) As Integer 

在vb.net:

<DllImport(TM1APIDLL)> Public Shared Function TM1ValBoolGet(ByVal hUser As IntPtr, ByVal vBool As IntPtr) As Integer 
End Function 

这可能是一个错字,但在你的VB6即返回类型是不一样的一个在VB.NET。 VB6整数是16位,VB.NET中的整数是32位。

+0

我正在编译x86环境的代码,我有一个32位的机器。 TM1U和TM1V的定义是因为网站解释了与C相关的函数。但是你可以看看函数是如何在VB Api包装器中声明的。 (如上所示)任何想法? – Rahul 2012-01-13 08:39:56

+0

我看到你的声明。无论如何,VB6 Long数据类型总是32位。但IntPtr数据类型是x86上的32位和64位的64位,因此我建议它不能在.NET中工作。对于x86编译应该可以避免这种情况,所以不太可能。 – tcarvin 2012-01-13 13:49:39

+0

@Rahul我编辑了多一点为你看看 – tcarvin 2012-01-13 13:58:58