代码之家  ›  专栏  ›  技术社区  ›  Adam

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

  •  0
  • Adam  · 技术社区  · 6 年前

    我有一个本机应用程序,我正在编写一个wpfgui,两个单独的进程通过管道进行通信。我想定义一组将通过管道传递并由本机和托管应用程序使用的结构。在最基本的层面上,它看起来是这样的:

    // 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应用程序不可见。似乎将结构标记为public只会创建有关名称和大小的信息,而不会创建成员的信息。元数据显示如下:

    这些结构都是普通的旧数据,我不认为需要封送。我知道我可以使用 StructLayout 诸如此类,但我希望避免重复的定义最终导致不匹配。

    问题: 有没有任何方法可以利用这些本机结构而不需要在托管端重新定义它们?

    0 回复  |  直到 6 年前
    推荐文章