2012-01-12 94 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