如何从c#调用带有PASSTRHOUGH函数的ExtEscape



我正在将对Zebra打印机的RFID编程支持添加到现有的打印应用程序中。为了对RFID芯片进行编程,我需要使用带有PASSTHROUGH标志的Windows API调用ExtEscape发送一些原始打印机代码。

我已经导入了这样的函数。

[DllImport("gdi32.dll", SetLastError = true, ExactSpelling = true, CharSet = CharSet.Ansi)]
public static extern int ExtEscape(IntPtr hDC, int nEscape, int cbInput, IntPtr inData, int cbOutput, IntPtr outData);

我遇到的问题是,当与PASSTHROUGH标志一起使用时,IntPtr需要指向一个具有大小和数据的结构。我已经这样定义了结构。

public struct PasstroughData
{
public Int32 Size;
public byte[] Data;
}

所以问题是;如何将其转换为可用于调用ExtEscape的内容?

尝试这样的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Runtime.InteropServices;

namespace ConsoleApplication40
{
class Program
{
static void Main(string[] args)
{
int size = 12;
PasstroughData data = new PasstroughData();
data.Size = 32;
data.Data = new byte[size];
int sz = Marshal.SizeOf(data);
//add 4 bytes in the Size property which is an integer
IntPtr BLOB = Marshal.AllocHGlobal(size + 4);
Marshal.WriteInt32(BLOB, 0, data.Size);
//copy to offset 4
Marshal.Copy(data.Data, 0, BLOB + 4, size);
}
public struct PasstroughData
{
public Int32 Size;
public byte[] Data;
}
}
}

相关内容

  • 没有找到相关文章

最新更新