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++结构体指针赋值

顶顶!!!高手指教
展开
 我来答
208vokcwu
2011-06-24 · TA获得超过2168个赞
知道大有可为答主
回答量:4655
采纳率:0%
帮助的人:803万
展开全部
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);
追问
我试了不行啊发生了应用程序错误 ~~~~(>_<)~~~~ 该怎么做啊 愁死我啦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5a5fe57c6
2011-06-24
知道答主
回答量:17
采纳率:0%
帮助的人:5.5万
展开全部
C#里面用String接收就可以的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
li_shengangel
2011-06-24 · TA获得超过140个赞
知道小有建树答主
回答量:280
采纳率:0%
帮助的人:148万
展开全部
使用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 赋好值后传进去
试试吧
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式