clover82625 2019-02-14 13:52 采纳率: 33.3%
浏览 529
已结题

C++ 结构体在C#中托管调用,编译报错误is not supported by the language

初学C#调用C++代码,想在C#中调用C++ 动态库的一个结构体,但编译时,报“XXX is not supported by the language”错误,不知道怎么修改。
代码如下:

C++:
#define TEST_STRUCT(name) [StructLayoutAttribute(LayoutKind::Sequential, Pack = 1)]\
typedef public ref struct name

namespace CPlusPlusDll {

TEST_STRUCT(A)
{
unsigned long a;

void operator=(const unsigned long val)
{
a = val;
}

unsigned long GetID()
{
return a;
}
}A;

TEST_STRUCT(B)
{
A aTest;
unsigned long c;
}B;

TEST_STRUCT(C)
{
B b;
C()
{
b.aTest = b.c;
}
}C;
}

C#:
using System;
using System.Runtime.InteropServices;
using CPlusPlusDll;

namespace CSharpTest
{
class Program
{
static void Main(string[] args)
{
B b = new B();
b.a.GetID();
int len = Marshal.SizeOf(typeof(B));
Console.WriteLine("length of B is: {0}", len);
Console.Read();
}
}
}

编译报错:
'CPlusPlusDll.C.b' is not supported by the language

请高手指点一下,要如何修改才能完全编译通过,在C#下可以使用?

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-02-14 14:19
    关注

    确保你C++那里的导出类型都是 CTS 类型

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog