Goedemorgen,
Ik probeer een stukje code werkende te krijgen wat gebruikt maakt van een DLL. De functies zijn gelukkig gedocumenteert. Het probleem is echter dat het C++ functies zijn, en ik ze in VB.NET aan wil roepen. Dat lukt aardig, maar ik loop vast op wat types variabelen.
In een goede poging om dat naar VB.NET om te zetten ben ik op dit gekomen:
De eerste werkt opzich prima. De tweede al minder, en de derde helemaal niet. Het probleem zit in de data types die ik met de functies meegeef. Ik heb geen idee hoe ik een pointer naar een string array moet meegeven op een manier dat die DLL het begrijpt. En de WORD variabele komt terug in complete onzin, ook bitwise gezien. Waarschijnlijk omdat de WORD variablen die ik meestuur ook als complete onzin aankomen.
De vergelijking die ik tot nu toe heb:
int = Integer
LPSTR = String
LPSTR * = pointer naar string array = ByRef StringArray() -> geeft memory corruption?
WORD = 4 byte signed of unsiged var = Integer / UInteger -> beide geven onzin terug
DWORD = 8 byte signed of unsiged var = Long / ULong?
Wie kan me helpen dit lijstje aan te vullen?
Ik probeer een stukje code werkende te krijgen wat gebruikt maakt van een DLL. De functies zijn gelukkig gedocumenteert. Het probleem is echter dat het C++ functies zijn, en ik ze in VB.NET aan wil roepen. Dat lukt aardig, maar ik loop vast op wat types variabelen.
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| int HLP_GetNumDevices () //Use this function to request the number of connected photometers. //Parameters: none //Return value: number of connected photometers WORD HLP_GetDeviceNames (LPSTR *DevNames, WORD Max_Len, WORD Max_Num) //Use this function to get the name list of the instruments. //Parameters: //DevNames pointer to an array of char pointers //Max_Len Length of strings, should be set to 256 //Max_Num Number of string pointers in the array //Return value: number of actually committed names DWORD HLP_OpenDevName (LPSTR DevName) //A connection to a specific instrument will be established. You can communicate only with one instrument simultaneously. //Parameters: //DevName pointer to a null terminated char, the name of one of the instruments connected to the computer //Return value: error code, on success 0 |
In een goede poging om dat naar VB.NET om te zetten ben ik op dit gekomen:
Visual Basic .NET:
1
2
3
4
5
6
7
8
| <DllImport("UsbMeasLib.dll")> Public Shared Function HLP_GetNumDevices() As Integer End Function <DllImport("UsbMeasLib.dll")> Public Shared Function HLP_GetDeviceNames(ByRef DevNames As String, ByVal Max_Len As Integer, ByVal Max_Num As Integer) As Integer End Function <DllImport("UsbMeasLib.dll")> Public Shared Function HLP_OpenDevName(ByRef DevName As String) As Integer End Function |
De eerste werkt opzich prima. De tweede al minder, en de derde helemaal niet. Het probleem zit in de data types die ik met de functies meegeef. Ik heb geen idee hoe ik een pointer naar een string array moet meegeven op een manier dat die DLL het begrijpt. En de WORD variabele komt terug in complete onzin, ook bitwise gezien. Waarschijnlijk omdat de WORD variablen die ik meestuur ook als complete onzin aankomen.
De vergelijking die ik tot nu toe heb:
int = Integer
LPSTR = String
LPSTR * = pointer naar string array = ByRef StringArray() -> geeft memory corruption?
WORD = 4 byte signed of unsiged var = Integer / UInteger -> beide geven onzin terug
DWORD = 8 byte signed of unsiged var = Long / ULong?
Wie kan me helpen dit lijstje aan te vullen?