大佬教程收集整理的这篇文章主要介绍了如何将C数据导出到C#结构?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
// C++ struct fvec3 { public: float x,y,z; fvec3(float x,float y,float z) : x(X),y(y),z(z) { } }; // C# [StructLayout(LayoutKind.Sequential)] struct fvec3 { public float x,z; public fvec3(float x,float z) { this.x = x; this.y = y; this.z = z; } }
现在,如果我想使用从C#到C的fvec3,我可以使用以下内容而不会出现问题:
// C++ __declspec(dllexport) void Import(fvec3 vector) { std::cout << vector.x << " " << vector.y << " " << vector.z; } // C# [DllImport("example.dll",CallingConvention = CallingConvention.Cdecl)] public static extern void Import(fvec3 vector); ... Import(new fvec3(1,2,3)); // Prints "1 2 3".
现在的问题是反过来:将C fvec3返回给C#.我怎样才能做到这一点?
我已经看到许多C#实现使用了以下内容:
// C# [DllImport("example.dll",CallingConvention = CallingConvention.Cdecl)] public static extern void Export(out fvec3 vector); ... fvec3 vector; Export(out vector); // vector contains the value given by C++
但是我该如何编写C Export功能呢?
我尝试了所有我能想到的签名和身体:
// Signatures: __declspec(dllexport) void Export(fvec3 vector) __declspec(dllexport) void Export(fvec3* vector) __declspec(dllexport) void Export(fvec3& vector) // Bodies (with the pointer variants) vector = fvec3(1,3); memcpy(&fvec3(1,3),&vector,sizeof(fvec3)); *vector = new fvec(1,3);
试试这个:
__declspec(dllexport) void Export(fvec3 *vector) { *vector = fvec3(1,3); }
(未测试)
// C++ __declspec(dllexport) fvec3 Export(void) { return fvec3(1,3); } // C# [DllImport("example.dll",CallingConvention = CallingConvention.Cdecl)] public static extern fvec3 Export(); ... fvec3 vector = Export();
(未测试)
以上是大佬教程为你收集整理的如何将C数据导出到C#结构?全部内容,希望文章能够帮你解决如何将C数据导出到C#结构?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。