Передача параметров C в DLL из Vb.net 2010 - PullRequest
1 голос
/ 12 августа 2011

Я пытаюсь вызвать 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 

Спасибо, с нетерпением ждем вашего предложения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...