C# 调用C++ dll传送结构体的问题???急
许_鑫 2013-11-22 11:18:00 我们用C# 调用别人开发的dll,传值的时候出现问题:
C++:
1. 定义的结构体为:
typedef struct
{
char TxBuffer[10];
bool TxFlag;
char DeviceIndex;
char CommandWord;
char Param1;
char Param2;
}Typedef_MLP_Comm, *pTypedef_MLP_Comm;
2. 对外的接口为:
bool __declspec(dllexport) MLP_CommCommand(pTypedef_MLP_Comm pMLP_Comm);//串口指令
C#:
1. 通过C#转换后的结构体:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct Typedef_MLP_Comm
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
public byte[] TxBuffer;
public bool TxFlag;
public byte DeviceIndex;
public byte CommandWord;
public byte Param1;
public byte Param2;
}
2. C# 对应的接口方法:
[DllImport(LibraryFile, EntryPoint = "MLP_CommCommand", CallingConvention = CallingConvention.Cdecl)]
public static extern bool MLP_CommCommand(ref Typedef_MLP_Comm pMLP_Comm);//串口指令
问题描述:
我通过C# 来调用dll,具体调用方法如下:
Typedef_MLP_Comm MLP_Comm = new Typedef_MLP_Comm();
MLP_Comm.DeviceIndex = 0x01;
MLP_Comm.CommandWord = 0x51;
bool retValue = MPL_CONNECTION_DLL.MLP_CommCommand(ref MLP_Comm);
请问我在dll的代码中加入AfxMessageBox来调试,在dll总是获取不到MLP_Comm中DeviceIndex和CommandWord的值,但是在 dll中设置MLP_Comm.param的值确可以在C#中获取到?
而且存在很奇怪的问题,我将C#结构体中变量顺序改变,返回的值也会改变???