使用C#的本机结构而不重新定义它

时间:2019-03-03 04:48:02

标签: c# c++-cli

我有一个本机应用程序,正在编写WPF GUI,用于两个单独的进程通过管道进行通信的地方。我想定义一组结构,这些结构将通过管道传递并由本机和托管应用程序使用。在最基本的级别上,它看起来像这样:

// gui_protocol.h (C++ App)
struct Foo
{
    int bar;
}
// gui_interop.cpp (C++/CLI Middle Layer)
#include "gui_protocol.h"
#pragma make_public(Foo)
// gui.cs (C# WPF GUI)
Foo foo = new Foo();
foo.bar = 2; // This doesn't work!

麻烦是最后一行。 Foo的字段对C#应用程序不可见。似乎标记struct public仅创建有关名称和大小的信息,而不是有关成员的信息。这是元数据显示的内容:

这些结构旨在作为普通的旧数据,我不认为需要封送处理。我知道我可以使用StructLayout等在托管代码中编写等效的结构,但我想避免使用重复的定义,最终导致不匹配。

问题:有什么方法可以利用这些本机结构,而无需在托管端重新定义它们?

0 个答案:

没有答案
相关问题