C DLL 代码如下:
struct tagTest2
{
int aa;
int bb;
};struct tagTest
{
BYTE a;
char ch[10];
int bb;
void *pData; //用于传递tagTest2
};extern "C" __declspec(dllexport) HANDLE test3(tagTest *pTest)
{
pTest->a = 100;
pTest->bb = 200; tagTest2 *pData = (tagTest2*)pTest->pData; pData->aa = 300;
pData->bb = 600;
return pTest;
}在C# 中的定义:
namespace testmydll
{
[StructLayout(LayoutKind.Sequential)]
struct tagTest
{
[MarshalAs(UnmanagedType.U1)]
public byte a;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=10)]
public char[] ch;
[MarshalAs(UnmanagedType.U4)]
public int bb;
[MarshalAs(UnmanagedType.U4)]
public IntPtr pData;
}; [StructLayout(LayoutKind.Sequential)]
struct tagTest2
{
[MarshalAs(UnmanagedType.U4)]
int aa;
[MarshalAs(UnmanagedType.U4)]
int bb;
};
class testdll
{
[DllImport("testdll.dll")]
public static extern IntPtr test3(ref tagTest pTest); }
}
请问在C# 中这样定义是否正确? 我定义了一个tagTest对象 ,怎么传递tagTest2 对象的指针到tagTest中的pData变量? 谢谢了.
struct tagTest2
{
int aa;
int bb;
};struct tagTest
{
BYTE a;
char ch[10];
int bb;
void *pData; //用于传递tagTest2
};extern "C" __declspec(dllexport) HANDLE test3(tagTest *pTest)
{
pTest->a = 100;
pTest->bb = 200; tagTest2 *pData = (tagTest2*)pTest->pData; pData->aa = 300;
pData->bb = 600;
return pTest;
}在C# 中的定义:
namespace testmydll
{
[StructLayout(LayoutKind.Sequential)]
struct tagTest
{
[MarshalAs(UnmanagedType.U1)]
public byte a;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=10)]
public char[] ch;
[MarshalAs(UnmanagedType.U4)]
public int bb;
[MarshalAs(UnmanagedType.U4)]
public IntPtr pData;
}; [StructLayout(LayoutKind.Sequential)]
struct tagTest2
{
[MarshalAs(UnmanagedType.U4)]
int aa;
[MarshalAs(UnmanagedType.U4)]
int bb;
};
class testdll
{
[DllImport("testdll.dll")]
public static extern IntPtr test3(ref tagTest pTest); }
}
请问在C# 中这样定义是否正确? 我定义了一个tagTest对象 ,怎么传递tagTest2 对象的指针到tagTest中的pData变量? 谢谢了.
IntPtr ptr = Marshal.AllocHGlobal(size);
tagTest2 t2 = new tagTest2();
Marshal.StructureToPtr(t2, ptr, true);//Code//用完释放
Marshal.FreeHGlobal(ptr);