2013-11-27 70 views
0
Public Declare Function getTable Lib "LuxDll.dll" (ByVal table As Integer, _ 
    ByVal col As Integer) As String 

BSTR _stdcall getTable(int table, int col) 

Dim i 
i=5 
debug.print getTable(i, 1) 

上述工作從VB6傳遞整型參數C++ DLL

可是如果我不「DIM我爲整」崩潰

應在VB中的參數比整數以外的東西嗎?

感謝

編輯:我應該指定C++側面碰撞和它,因爲當我做這樣的事情的整數值被作爲-65000ish

+1

嘗試'Dim i As Long' – Plutonix

+0

哈哈,我應該在嘗試之前詢問..那工作:D謝謝..也感謝編輯(我總是在格式化大聲笑)。我應該改變byval表作爲整數,col改爲整數也是long?它似乎與他們一起工作的整數,但我不明白爲什麼 – user1088794

回答

1

在將VB6與C/++混合使用時,C int等同於VB6中的Long:所以Dim i As Long應該可以工作。在.NET中這不再是真的。雖然你是對的,但它應該是BYVAL(另一個常見的錯誤)

1

過去了,我嘗試是非常明確的跟我的類型。 Int從實施到實施,平臺到平臺的變化。

使用signed long或在所有地方的VB Int32中的等效類型,而不是整數或整數。這將爲您節省很多痛苦。

還有一些東西需要說明的是爲了文檔目的明確你的類型。我遇到了很多問題,試圖從一個供應商那裏得到一個錯誤的文檔工作的DLL。像Int64這樣簡單的操作,或者是unsigned short操作將會很快地告訴有人試圖與你的DLL進行接口如何處理。