работа с указателями из элемента управления ocx в c # csharp - PullRequest
0 голосов
/ 14 февраля 2011

Редактировать: Я работаю с управлением OCX в C #.Этот контроль имеет свойства, которые содержат длину буфера данных и указатель на этот буфер.Как можно получить / получить / использовать эти данные, возможно, с точкой в ​​C #.Я использую Visual Studio 2008.

Я работаю с контролем .ocx в C #.У этого .ocx есть свойства, которые содержат длину буфера данных и указатель на буфер данных.Как я могу получить данные, используя этот указатель в C #?Я использую VS C # 2008

Ответы [ 2 ]

3 голосов
/ 14 февраля 2011

Вы не предоставили точных данных, поэтому это предположение основано на вашей информации.Вы можете найти пример здесь .Я процитирую (и упросту) соответствующие части:

// C/C++
int ncWrite(unsigned long DataSize, void* DataPtr)

// C#
[DllImport("Nican.dll")]
unsafe static extern int ncWrite(uint DataSize, byte[] DataPtr);

byte[] DataWrite = {0x23, 0x23, 0x30, 0x03, 0x78, 0xEC, 0xFF, 0xFF };
int status = ncWrite(Marshal.SizeOf(DataWrite), DataWrite);

РЕДАКТИРОВАТЬ: С вашей информацией:

// .ocx
Public Function WriteData(ByVal devIndex As Long, ByVal lpOutData As Long, ByVal cntData As Long) As Long

// C#
[DllImport("TheOcxControl.dll")]
static extern int WriteData(int index, byte[] outputData, int outputDataLength);

byte[] DataToWrite = {0x23, 0x23, 0x30, 0x03, 0x78, 0xEC, 0xFF, 0xFF };
int status = WriteData(index, DataToWrite, Marshal.SizeOf(DataToWrite));

Что касается события прибытия:

// the e variable have devIndex, lenDataBufer, lpDataBufer properties.
// lenDataBufer is size of buffer, lpDataBufer is pointer to data array.
byte[] destination;
Marshal.Copy(lpDataBufer, destination, 0, lenDataBufer);
0 голосов
/ 14 февраля 2011
...