【问题标题】:How To Call A Managed C++ Method and Pass C++ Struct In From C#如何调用托管 C++ 方法并从 C# 传入 C++ 结构
【发布时间】:2017-08-22 13:43:28
【问题描述】:

我目前有一个托管 C++ 类,其方法如下所示...

int Calculate(double price, double quantity)

我可以像这样从我的 C# 库中调用此方法...

MyLib.Calculate(1,1)

但是,我现在想传入在我的 C++ 库中定义的结构数组,而不是价格和数量原语。

typedef struct my_prices {          
    double quantity;                
    double price;       
} 

所以我的 C++ 方法签名然后更改为这个...

int Calculate(my_prices prices[])

我现在苦苦挣扎的是如何调用这个托管的 C++ 方法并将 C# 中的价格数组传递给它。我似乎无法在 C# 中创建这个结构,我尝试定义它的 C# 版本,但不知道如何将它代理到 C++ 版本。

我希望这是有道理的,我是一名 C# 开发人员,几乎没有 C++ 经验,所以可能在说废话。

【问题讨论】:

  • 谢谢。我无法控制托管 C++ 库。我需要从 C# 中找到一种方法来开始传递这个结构。
  • @Fildor 这是托管的 C++,不是非托管的吗?
  • 嗯,我也意识到了。以为是我找到的那个链接,当我搜索完全相同的...但它不是。
  • @Gavin a minimal reproducible example 可能有助于获得有意义的答案。
  • 刚找到这个问题,或许能给你一点提示:stackoverflow.com/q/26715366/982149

标签: c# c++-cli interop


【解决方案1】:

可以在 C++/CLI 中执行此操作,但您需要一个 ref 类或值类型。

value struct my_prices {          
    double quantity;                
    double price;       
} 

int Calculate(array<my_prices> ^prices)
{
   for each (my_prices p in prices)
   {
...

【讨论】:

    猜你喜欢
    • 2013-03-24
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多