C dll von VB6 aus aufrufen

12/07/2011 - 07:55 von Hermie | Report spam
Hallo!

Kann mir jemand sagen, was ich tun muss, damit Folgendes funktioniert?
Ich habe eine C-dll, die ich von VB6 aus ansprechen muss.
Die Dokumentation der DLL erklàrt mir Folgendes:

DPOINT
double x
double y

LPOINT
long x
long y

EYEDATA
DPoint Pupil
DPoint Glint1
DPoint Glint2
LPoint GazePoint
double PupilDiameter
bool Found
bool Calibrated

IMAGEDATA
double Time
EyeData LeftEye
EyeData RightEye
unsigned char * PixelData
int Width
int Height

Und so habe ich sie in VB6 gemacht:

Public Type DPoint
x As Double
y As Double
End Type

Public Type LPoint
x As Long
y As Long
End Type

Public Type EyeData
Pupil As DPoint
Glint1 As DPoint
Glint2 As DPoint
GazePoint As LPoint
PupilDiameter As Double
Found As Long
Calibrated As Long
End Type

Public Type ImageData
Time As Double
LeftEye As EyeData
RightEye As EyeData
PixelData As Long
Width As Long
Height As Long
End Type

Die C-Funktion sieht so aus:

bool GetImageData(
unsigned long MaxTimeout,
ImageData * Data);

Die habe ich dann so in VB6 umgesetzt:

Public Declare Function GetImageData Lib "ETApi" (ByVal nMaxTimeOut As
Long, ByRef nImageData As ImageData) As Long

Und so rufe ich sie auf:

Dim lRet&
lRet = GetImageData(50, nImageData)

Prinzipiell geht es, aber die Werte, die dann in den Variablen sind,
sind verschoben. Sie sind schon da, aber nicht in den richtigen
"Members". Deshalb denke ich, ich verwende irgendwo nicht den richtigen
Datentyp.

Sieht jemand vielleicht, was ich hier falsch gemacht habe?

Danke!
Hermie
 

Lesen sie die antworten

#1 Armin Zingler
12/07/2011 - 12:24 | Warnen spam
Am 12.07.2011 07:55, schrieb Hermie:
EYEDATA
DPoint Pupil
DPoint Glint1
DPoint Glint2
LPoint GazePoint
double PupilDiameter
bool Found
bool Calibrated


Public Type EyeData
Pupil As DPoint
Glint1 As DPoint
Glint2 As DPoint
GazePoint As LPoint
PupilDiameter As Double
Found As Long
Calibrated As Long
End Type



"That means that for Visual C++ 4.2, a call of sizeof(bool) yields 4,
while in Visual C++ 5.0 and later, the same call yields 1"

Also: bool => As Byte. (auch beim Funktionsrückgabetyp)

Geht's nu?



Armin

Ähnliche fragen