p/invoke 方法 returns 空结构
p/invoke method returns empty struct
我有包含结构的 C++ 代码,我需要将它传递给 C#:
wrapper.h
#pragma once
typedef struct
{
int int1;
int int2;
} MY_STRUCT;
MY_STRUCT mystruct;
extern "C" __declspec(dllexport) int __stdcall GetTestStruct(MY_STRUCT* cs_struct);
wrapper.cpp:
int __stdcall GetTestStruct(MY_STRUCT* cs_struct)
{
mystruct.int1 = 23;
mystruct.int2 = 45;
cs_struct = &mystruct;
return 0;
}
wrapper.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);
}
}
在我 运行 这段代码之后,s 对于 int1 和 int2 仍然有零。我尝试将 C# 结构字段设为私有和 public,但没有区别。我查看了 C++/CLI,但这对于这个小任务来说似乎有些过分了。有没有简单的方法可以做到这一点?
更改您的 C++ 函数以直接在引用的结构上设置整数值:
int __stdcall GetTestStruct(MY_STRUCT* cs_struct)
{
cs_struct->int1 = 23;
cs_struct->int2 = 45;
//cs_struct = *mystruct; //This line may not be necessary
return 0;
}
我有包含结构的 C++ 代码,我需要将它传递给 C#:
wrapper.h
#pragma once
typedef struct
{
int int1;
int int2;
} MY_STRUCT;
MY_STRUCT mystruct;
extern "C" __declspec(dllexport) int __stdcall GetTestStruct(MY_STRUCT* cs_struct);
wrapper.cpp:
int __stdcall GetTestStruct(MY_STRUCT* cs_struct)
{
mystruct.int1 = 23;
mystruct.int2 = 45;
cs_struct = &mystruct;
return 0;
}
wrapper.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);
}
}
在我 运行 这段代码之后,s 对于 int1 和 int2 仍然有零。我尝试将 C# 结构字段设为私有和 public,但没有区别。我查看了 C++/CLI,但这对于这个小任务来说似乎有些过分了。有没有简单的方法可以做到这一点?
更改您的 C++ 函数以直接在引用的结构上设置整数值:
int __stdcall GetTestStruct(MY_STRUCT* cs_struct)
{
cs_struct->int1 = 23;
cs_struct->int2 = 45;
//cs_struct = *mystruct; //This line may not be necessary
return 0;
}