C#调用C++DLL接口时,C++接口需要的参数是结构体数组指针,那我C#如何编写
你能替我解答吗谢啦怎么定义结构体数组我会,结构体指针呢?怎么写,并且为结构体传值怎么做啊?例如:c++typedefstruct{charpchFromId[12];//...
你能替我解答吗 谢啦
怎么定义结构体数组 我会,结构体指针呢?怎么写,并且为结构体传值怎么做啊?
例如:
c++
typedef struct
{
char pchFromId[12]; //主叫号码
char pchToId[12]; //被叫号码
char pchUser[12]; //用户名
char pchPsw[12]; //密码
int iTranType; //连接方式 1 TCP
char pchUrl[20]; //IP地址
int iPort; //端口
}NETLINK_INFO,*pNETLINK_INFO;
c#结构体
我是这样写的 :public struct NETLINK_INFO
{ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
public char[] pchUser; //用户名
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
public char[] pchPsw; //密码
public int iPort; //端口 }
调用开发包
[DllImport("VsClien.dll", EntryPoint = "VSSP_ClientStart", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]private static extern long VSSP_ClientStart(CHANNEL_CONINFOR _pConInfor);
CHANNEL_CONINFOR 应该是机构体指针,应该怎么写啊 :public static long ClientStart(CHANNEL_CONINFOR _pConInfor)
{ return VSSP_ClientStart(_pConInfor);}
怎样为上面结构赋值
高手指教啊!!!
在调用c++的dll的方法的参数类型为结构体指针。请问:1结构体指针用c#怎么写,结构体里有数组。2当为结构体指针赋值怎么赋值,也就是使用dll开发包方法
重点是问:
1c++结构体指针转换成c#的什么数据类型。
2怎么用1c++结构体指针赋值
顶顶!!!高手指教 展开
怎么定义结构体数组 我会,结构体指针呢?怎么写,并且为结构体传值怎么做啊?
例如:
c++
typedef struct
{
char pchFromId[12]; //主叫号码
char pchToId[12]; //被叫号码
char pchUser[12]; //用户名
char pchPsw[12]; //密码
int iTranType; //连接方式 1 TCP
char pchUrl[20]; //IP地址
int iPort; //端口
}NETLINK_INFO,*pNETLINK_INFO;
c#结构体
我是这样写的 :public struct NETLINK_INFO
{ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
public char[] pchUser; //用户名
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
public char[] pchPsw; //密码
public int iPort; //端口 }
调用开发包
[DllImport("VsClien.dll", EntryPoint = "VSSP_ClientStart", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]private static extern long VSSP_ClientStart(CHANNEL_CONINFOR _pConInfor);
CHANNEL_CONINFOR 应该是机构体指针,应该怎么写啊 :public static long ClientStart(CHANNEL_CONINFOR _pConInfor)
{ return VSSP_ClientStart(_pConInfor);}
怎样为上面结构赋值
高手指教啊!!!
在调用c++的dll的方法的参数类型为结构体指针。请问:1结构体指针用c#怎么写,结构体里有数组。2当为结构体指针赋值怎么赋值,也就是使用dll开发包方法
重点是问:
1c++结构体指针转换成c#的什么数据类型。
2怎么用1c++结构体指针赋值
顶顶!!!高手指教 展开
3个回答
展开全部
System.Runtime.InteropServices;
// 定义结构体
struct BriSteps{
byte nCount;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=1)]
byte[] nSteps;
}
// 这里得换成具体的dll的名字
[DllImport("XXX.dll")]
static extern bool GetBriVal(out byte nVal);
[DllImport("XXX.dll")]
static extern bool SetBriVal(byte nVal);
[DllImport("XXX.dll")]
static extern bool GetBriSteps(out BriSteps tSteps);
// 定义结构体
struct BriSteps{
byte nCount;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=1)]
byte[] nSteps;
}
// 这里得换成具体的dll的名字
[DllImport("XXX.dll")]
static extern bool GetBriVal(out byte nVal);
[DllImport("XXX.dll")]
static extern bool SetBriVal(byte nVal);
[DllImport("XXX.dll")]
static extern bool GetBriSteps(out BriSteps tSteps);
追问
我试了不行啊发生了应用程序错误 ~~~~(>_<)~~~~ 该怎么做啊 愁死我啦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C#里面用String接收就可以的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用IntPtr 代替结构体指针
更多追问追答
追问
这个
IntPtr[] ptArray = new IntPtr[1];
ptArray[0] = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(HSCAN_MSG)) * 10);
IntPtr pt = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(HSCAN_MSG)));
Marshal.Copy(ptArray, 0, pt, 1);
追答
[DllImport("VsClien.dll", EntryPoint = "VSSP_ClientStart", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]private static extern long VSSP_ClientStart(IntPtr _pConInfor);
_pConInfor 这个变量为你声明的struct 赋好值后传进去
试试吧
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询