c#调用回调函数含结构体问题
C++封装的结构体与函数形式如下:
typedef struct _DS_INFO{
DWORD apid;
WORD hwid;
WORD flag;
DWORD real_ip_addr;
DWORD pseudo_ip_addr;
DWORD host_ip_addr;
BYTE mac[MACLEN];
}DS_INFO, *PDS_INFO;
到处DLL:
IMPORT_EXPORT int SDKCI_FUNC dsc_EnumSearch(DWORD server_ip, WNDENUMSEARCHPROC lpenumproc);
typedef int (CALLBACK* WNDENUMSEARCHPROC)(PDS_INFO);
我对应的C#转换调用形式如下:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct DS_INFO
{
public uint apid;
public ushort hwid;
public ushort flag;
public uint real_ip_addr;
public uint pseudo_ip_addr;
public uint host_ip_addr;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public byte[] mac;
}
public delegate int ProcessDelegate(ref DS_INFO dsinfo);
[DllImport(".\\NECI.dll",CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
unsafe public static extern int dsc_EnumSearch(uint server_ip, ProcessDelegate lpenumproc);
int EnumSearchProc( ref DS_INFO dsinfo)
{
Trace.WriteLine("call back ");
}
程序调用部分:
try
{
ProcessDelegate newCallproc = new ProcessDelegate(EnumSearchProc);
int ret = dsc_EnumSearch(0xffffffff, newCallproc);
}
catch(Exception ex)
{
throw ex;//System.ArgumentNullException 中第一次偶然出现的“未知模块”类型的异常
}
/////////////////
请问我上述封装有什么问题?DLL可以确定没有任何问题。有意帮忙调试的大侠,请留下EMAIL。