Я пытаюсь вызвать C ++ dll из Vb.net. Функция, вызываемая Iam, объявлена в dll, как показано ниже
extern "C" DWORD PASCAL EXPORT STDFUPRT_CreateMappingFromDevice(PCHAR szDevLink, PMAPPING *ppMapping, PDWORD pNbAlternates)
где pchar - указатель на массив байтов (строка)
pdword - указатель на слово
Pmapping - это структура, представленная ниже
**typedef struct {
DWORD dwStartAddress;
DWORD dwAliasedAddress;
DWORD dwSectorIndex;
DWORD dwSectorSize;
BYTE bSectorType;
BOOL UseForOperation;
} MAPPINGSECTOR, *PMAPPINGSECTOR;
typedef struct {
BYTE nAlternate;
char Name[MAX_PATH];
DWORD NbSectors;
PMAPPINGSECTOR pSectors;
} MAPPING, *PMAPPING;**
Я пытался посылать последовательные 283 байта, так как это общий размер структуры, но это не сработало.
Structure PMAPPING
Dim nAlternate As Byte
Dim name As IntPtr
Dim nbsector As Int32
Dim psector As IntPtr
End Structure
Dim m_pMapping As PMAPPING
m_pMapping.name = Marshal.AllocHGlobal(259)
m_pMapping.psector = Marshal.AllocHGlobal(17)
Dim tmpbuffer() As Byte
'load symbolic link
tmpbuffer = System.Text.Encoding.ASCII.GetBytes(devpathstr)
'Context.szdevlink = devpathstr
dwRet = STDFUPRT_CreateMappingFromDevice(tmpbuffer, m_pMapping, alt2)
'check return string value
Dim teststr As String
teststr = Marshal.PtrToStringAuto(m_pMapping.name)
'teststr returns garbage value
Спасибо, с нетерпением ждем вашего предложения