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#的结构体
请直接给出精简代码 越简单越好 展开
struct MyBuf
{
uint8_t out0;
}mydata;
这个是C#的结构体
[StructLayout(LayoutKind.Sequential)]
public struct MyBufC
{
public byte out0;
}//*/
请问怎么得到C结构体内的 out0数据 即传给c#的结构体
请直接给出精简代码 越简单越好 展开
展开全部
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没写对 数据传不过去
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询