我有包含結(jié)構(gòu)的 C++ 代碼,我需要將它傳遞給 C#:包裝器.h#pragma oncetypedef struct{ int int1; int int2;} MY_STRUCT;MY_STRUCT mystruct;extern "C" __declspec(dllexport) int __stdcall GetTestStruct(MY_STRUCT* cs_struct);包裝器.cpp:int __stdcall GetTestStruct(MY_STRUCT* cs_struct){ mystruct.int1 = 23; mystruct.int2 = 45; cs_struct = &mystruct; return 0;}包裝器.cs:class Program{ [StructLayout(LayoutKind.Sequential)] public struct MY_STRUCT { public int int1; public int int2; } [DllImport(VpxMctlPath)] public static extern int GetTestStruct(ref MY_STRUCT mystruct); static void Main(string[] args) { var s = new MY_STRUCT(); GetTestStruct(ref s); }}運(yùn)行此代碼后,s 的 int1 和 int2 仍然為零。我試圖將 C# 結(jié)構(gòu)字段設(shè)置為私有和公共,但沒(méi)有區(qū)別。我查看了 C++/CLI,但這對(duì)于這個(gè)小任務(wù)來(lái)說(shuō)似乎有些過(guò)分了。有沒(méi)有簡(jiǎn)單的方法可以做到這一點(diǎn)?
p/invoke 方法返回空結(jié)構(gòu)
長(zhǎng)風(fēng)秋雁
2022-12-24 14:32:14