我將一個簡單的用戶定義類型(UDT)從Visual Basic 6傳遞給一個C DLL。能正常工作,除了雙數據類型,它表現爲0。從Visual Basic 6調用C DLL:雙重數據類型不工作
C DLL:
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
typedef struct _UserDefinedType
{
signed int Integer;
unsigned char Byte;
float Float;
double Double;
} UserDefinedType;
int __stdcall Initialize (void);
int __stdcall SetUDT (UserDefinedType * UDT);
BOOL WINAPI DllMain (HINSTANCE Instance, DWORD Reason, LPVOID Reserved)
{
return TRUE;
}
int __stdcall Initialize (void)
{
return 1;
}
int __stdcall SetUDT (UserDefinedType * UDT)
{
UDT->Byte = 255;
UDT->Double = 25;
UDT->Float = 12345.12;
UDT->Integer = 1;
return 1;
}
的Visual Basic 6代碼:
Option Explicit
Private Type UserDefinedType
lonInteger As Long
bytByte As Byte
sinFloat As Single
dblDouble As Double
End Type
Private Declare Function Initialize Lib "C:\VBCDLL.dll"() As Long
Private Declare Function SetUDT Lib "C:\VBCDLL.dll" (ByRef UDT As UserDefinedType) As Long
Private Sub Form_Load()
Dim lonReturn As Long, UDT As UserDefinedType
lonReturn = SetUDT(UDT)
Debug.Print "VBCDLL.SetUDT() = " & CStr(lonReturn)
With UDT
Debug.Print , "Integer:", CStr(.lonInteger)
Debug.Print , "Byte:", CStr(.bytByte)
Debug.Print , "Float:", CStr(.sinFloat)
Debug.Print , "Double:", CStr(.dblDouble)
End With
End Sub
Visual Basic的輸出:
VBCDLL.SetUDT() = 1
Integer: 1
Byte: 255
Float: 12345.12
Double: 0
正如你可以看到,雙被顯示爲,當它應該是。
你可以嘗試插入另一'Float'第一'Float'和'Double'之間並看看會發生什麼。也許C和Visual Basic不同意如何去填充'double'。 – 2010-08-23 06:03:30