C# 调用C++ dll传送结构体的问题???急
我们用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#结构体中变量顺序改变,返回的值也会改变???
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#结构体中变量顺序改变,返回的值也会改变???
...全文
相关推荐
C#调用动态库,C_调用C++DLL.pdf
### C#调用C++ DLL的关键知识点#### 一、数据类型转换问题在C#中调用C++ DLL(动态链接库)时,首先遇到的问题之一就是**数据类型转换**。
C#中byte数组和c++结构体的转换
在写C#TCP通信程序时,发送数据时,只能发送byte数组,处理起来比较麻烦不说,如果是和c++等写的程序通信的话,很多的都是传送结构体,在VC6.0中可以很方便的把一个char[]数组转换为一个结构
VC/C#调用delphi写的dll, 演示如何进行类的传递并callback调用方的代码
在Delphi中创建DLL,然后在VC或C#中调用,可以利用Delphi的强大面向对象特性,并将其集成到C++项目中。首先,让我们理解一下Delphi DLL的创建过程。
c#调用c++库函数参数类型转换.docx
C# 调用 C++ 库函数参数类型转换在本文中,我们将探讨 C# 调用 C++ 库函数参数类型转换的问题。首先,我们需要了解 C# 和 C++ 之间的数据类型转换问题,以及指针或地址参数传送的问题。
C#调用C++编写的COMDLL.pdf
C# 调用 C++ 编写的 COM DLL在 C# 调用 C++ 编写的 COM DLL 时,经常会遇到两个问题:数据类型转换问题和指针或地址参数传送问题。


