請各位前輩幫我看一下為什麼下面的程式碼會出現截然不同的結果.
'C File -------
typedef struct _T_TEST
{
unsigned long t1;
 char     t2[16];
 unsigned long t3;
 unsigned long t4;
 unsigned long t5;
} T_TEST;
long WINAPI MyTestFunction(T_TEST *list)
{
long i;
 T_TEST temp;

temp.t1 = 50;
 for(i=0; i<10; i++)
  memcpy(list+i, &temp, sizeof(T_TEST));

return(i);
}
'VB File -------
Public Type T_TEST
t1 As Long
 t2 As String * 16
 t3 As Long
 t4 As Long
 t5 As Long
End Type
狀態一:
Declare Function MyTestFunction lin "test.dll" (byRef lpArray As Byte) As Long
Dim list() As Byte
Dim temp As T_TEST
Redim list(0 to 10 * Len(temp) - 1)
Call MyTestFunction(list(0)) '成功, list(0)=50, list(1)=0, list(2)=0, list(3)=0, ...傳回內容無誤
狀態二:
Declare Function MyTestFunction lin "test.dll" (byRef lpArray As T_TEST) As Long
Dim list() As T_TEST
Redim list(0 to 10 - 1)
Call MyTestFunction(list(0)) '失敗, VB當掉並關閉
我確定dll沒有問題, 為什麼一個型別宣告成Byte沒問題, 一個使用自訂型別就會造成VB自動關閉, 另外我試過宣告成Long, 也是會造成VB當掉. 我想知道究竟是什麼原因造成這樣的結果, 煩請前輩們解惑.
arrow
arrow
    全站熱搜

    vbqa 發表在 痞客邦 留言(4) 人氣()