Newsgroup: it.comp.lang.visual-basic
Titolo: Conversion struttura da C a VB

Avrei bisogno di convertire la seguente struttura da C a VB5.
Qualcuno potrebbe dirmi se č possibile e come?
Ecco il codice in C
typedef struct 
{
DWORD dwTotalSize;
DWORD dwReserved1;
DWORD dwReserved2;
char szKey[15];
} MSFLLibraryKey_struct
HANDLE hKeyMap
hKeyMap = CreateFileMapping((HANDLE) 0xffffffff, NULL, PAGE_READWRITE,
0, sizeof(MSFLLibraryKey_struct), "Sample");
MSFLLibraryKey_struct *psLibKey;
psLibKey = (MSFLLibraryKey_struct *) MapViewOfFile(hKeyMap,
FILE_MAP_WRITE, 0, 0, 0);
psLibKey->dwTotalSize = sizeof(MSFLLibraryKey_struct);
strcpy(psLibKey->szKey, "xxx-xxxxxxxx");
psLibKey->dwReserved1=0;
psLibKey->dwReserved2=0;
UnmapViewOfFile(psLibKey);
CloseHandle(hKeyMap);
In particolare vedo che qui vengono utilizzati dei puntatori che non
sono supportati da VB.
Grazie per l'aiuto.

 sono supportati da VB.
E chi lo dice?
VB ti fa credere di non usare i puntatori, ma anche lui non può farne a meno
:)
Ciao
--
NeoDataType : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

 VB ti fa credere di non usare i puntatori, ma anche lui non può farne a meno
eh he he ... vero, ovviamente.
Quanto litigavo un po' di anni fa con quei maledetti 
iPictureDisp, Picture, Image etc etc, che non si capiva mai se 
fossero handle o puntatori diretti. Poi ho smesso di smanettare, 
e quindi non ci litigo più
ciao
CCCP++Mario


 MemCopy (VarPtr(psLibKey)), PtrKeyStruct, Len(psLibKey)
Sě, in effetti č vero, dato che VB gestisce le strutture solo come valori e
non come riferimenti (come si direbbe in .net)


Ciao
Sono riuscito a far funzionare il tutto con il codice seguente.
Tutto funziona correttamente sotto Windows XP mentre con Windows 98
non funziona. Il problema potrebbe riguardare le stringhe e la
codifica Unicode?
Grazie.
Public Declare Function CreateFileMapping Lib "kernel32" Alias
"CreateFileMappingA" (ByVal hFile As Long, lpFileMappigAttributes As
SECURITY_ATTRIBUTES, ByVal flProtect As Long, ByVal dwMaximumSizeHigh
As Long, ByVal dwMaximumSizeLow As Long, ByVal lpname As String) As
Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As
Long) As Long
Public Declare Function FlushFileBuffers Lib "kernel32" (ByVal hFile
As Long) As Long
Public Declare Function MapViewOfFile Lib "kernel32" (ByVal
hFileMappingObject As Long, ByVal dwDesiredAccess As Long, ByVal
dwFileOffsetHigh As Long, ByVal dwFileOffsetLow As Long, ByVal
dwNumberOfBytesToMap As Long) As Long
Public Declare Function UnmapViewOfFile Lib "kernel32" (ByVal
lpBaseAddress As Long) As Long
Public Declare Function OpenFileMapping Lib "kernel32" Alias
"OpenFileMappingA" (ByVal dwDesiredAccess As Long, ByVal
bInheritHandle As Long, ByVal lpname As String) As Long
Public Declare Function GetLastError Lib "kernel32" () As Long
Public Const FILE_MAP_WRITE = &H2
Public Const PAGE_READWRITE = 4&
Public Const MSFL_KEY_LENGTH_VB = 12
Type MSFLLibraryKey_struct
    dwTotalSize As Long
    dwReserved1 As Long
    dwReserved2 As Long
    szKey As String * MSFL_KEY_LENGTH_VB
End Type
Dim hKeyMap As Long
Dim psLibKey As MSFLLibraryKey_struct
Dim MappingAddress As Long
Dim Security As SECURITY_ATTRIBUTES
hKeyMap = CreateFileMapping(&HFFFFFFFF, Security, PAGE_READWRITE, 0,
Len(psLibKey), "AggiornaDati" + Chr$(0))
MappingAddress = MapViewOfFile(hKeyMap, FILE_MAP_WRITE, 0, 0, 0)
If (MappingAddress <> 0) Then
    agCopyData ByVal MappingAddress, psLibKey, Len(psLibKey)
    psLibKey.dwReserved1 = 0
    psLibKey.dwReserved2 = 0
    psLibKey.szKey = "xxx-xxxxxxxx" + Chr$(0)
    psLibKey.dwTotalSize = Len(psLibKey)
    agCopyData psLibKey, ByVal MappingAddress, Len(psLibKey)
End If
iErr = MSFL1_Initialize("AggiornaDati" + Chr$(0), "Andrea" + Chr$(0),
MSFL_DLL_INTERFACE_VERSION)
MSFL_ErrTest (iErr)
UnmapViewOfFile (MappingAddress)
CloseHandle (hKeyMap)

Ciao
Sono riuscito a far funzionare il tutto con il codice seguente.





Type MSFLLibraryKey_struct
    dwTotalSize As Long
