相关疑难解决方法(0)

C#P/Invoke结构问题

我正在尝试为C API(本机Win dll)编写一个C#P/Invoke包装器,通常这样可以正常工作.唯一的例外是将结构作为C代码中的参数的特定方法.在没有任何异常的情况下调用该函数,但它返回false,表示执行失败.

在API头文件中,涉及的方法和结构定义如下:

#define MAX_ICE_MS_TRACK_LENGTH  256
typedef struct tagTRACKDATA
{   
    UINT nLength;
    BYTE TrackData[MAX_ICE_MS_TRACK_LENGTH];
} TRACKDATA, FAR* LPTRACKDATA;
typedef const LPTRACKDATA LPCTRACKDATA;

BOOL ICEAPI EncodeMagstripe(HDC /*hDC*/,
             LPCTRACKDATA /*pTrack1*/,
             LPCTRACKDATA /*pTrack2*/,
             LPCTRACKDATA /*pTrack3*/,
             LPCTRACKDATA /*reserved*/);
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下代码创建C#P/Invoke包装器:

public const int MAX_ICE_MS_TRACK_LENGTH = 256;

[StructLayout(LayoutKind.Sequential)]
public class MSTrackData {
    public UInt32 nLength;
    public readonly Byte[] TrackData = new byte[MAX_ICE_MS_TRACK_LENGTH];
}

[DllImport("ICE_API.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool EncodeMagstripe(IntPtr hDC,
                    [In]ref MSTrackData pTrack1,
                    [In]ref MSTrackData pTrack2,
                    [In]ref MSTrackData pTrack3, …
Run Code Online (Sandbox Code Playgroud)

c# pinvoke struct

6
推荐指数
1
解决办法
6509
查看次数

标签 统计

c# ×1

pinvoke ×1

struct ×1