c#调用c生成的DLL,得到其结构体的数据

C的结构体注意不是C++structMyBuf{uint8_tout0;}mydata;这个是C#的结构体[StructLayout(LayoutKind.Sequent... C的结构体 注意不是C++
struct MyBuf
{
uint8_t out0;
}mydata;

这个是C#的结构体
[StructLayout(LayoutKind.Sequential)]
public struct MyBufC
{
public byte out0;
}//*/

请问怎么得到C结构体内的 out0数据 即传给c#的结构体
请直接给出精简代码 越简单越好
展开
 我来答
氨屠笙
2018-04-08 · TA获得超过2936个赞
知道小有建树答主
回答量:1762
采纳率:78%
帮助的人:503万
展开全部

c.dll

struct MyBuf
{
    uint8_t out0; 
}mydata;

void func(Mybuf* data);

c#

[StructLayout(LayoutKind.Sequential)]
public struct MyBufC
{
    public byte out0;
}

[DllImport("c.dll")]
public static void func(ref MyBufC data);


// 使用方式
MyBufC  a = new MyBufC();
func(ref a);

我也没编译验证,只是凭记忆写的,主要是ref关键字的使用。

如果有问题,你在追问里再补充一下

更多追问追答
追问
void func(Mybuf* data); 这句不通过
void func(struct MyBuf * data) {}这样就能通过 而且要加大括号 否则C#找不到入口点 但数据还是传不过去 struct MyBuf{ uint8_t out0; }mydata={3};
这样我实际给out0=3了吧 但值传不过去
Console.WriteLine(Convert.ToString(a.out0, 16).ToUpper().PadLeft(2, '0'));
显示00 c#的写法没问题同我在CSDN下的例程一样 就是他的DLL是用的c++应该还是我的c DLL没写对 数据传不过去
追答

唯一的难点在于结构体里面如果有指针类型的话,不好处理。void*和char*。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式