c# - 我可以通过 C++/CLI 包装器将 C# 数组传递给 C 指针吗?

标签 c# c arrays c++-cli wrapper

这是我的 C 函数定义:

//C
int FXForwardRate(
    long         *riskZCDates,      /* (I) Risk ZC dates */ 
    double       *fwdRate);         /*(O) Output */

第一个参数实际上是指向一个long数组。 在 C# 中,我希望这样调用它:

//C#    
int[] array = {1,2,3}; //if i'm not mistaking long in C is int in :NET
double fwdRate = 0;

Class1.FXForwardRate(array, ref fwdRate);

现在对于我的 C++/CLI 代码,我不知道如何在 Class1 类中声明该函数(我没有把整个代码放在简洁的地方):

//C++/CLI
int Class1::FXForwardRateW(int[] premium, double %fwdRate)
{
     double _tempFwdRate = 0.0;
     int _status = FXForwardRate(premium, &_tempFwdRate);
     fwdRate = _tempFwdRate;
     return _status;
}

我从另一个我写的函数知道我对第二个参数所做的是正确的(虽然不确定这是最好的方法)。但是第一个呢?我应该做同样的事情吗?即:定义一个指针将其传递给 C 函数,然后将值复制回数组? 问候

最佳答案

正确的解决方案(Lirik 和 pst 都指出了正确的方向)是:

int Class1::FXForwardRateW(array<int>^ premium, double %fwdRate)
{
     double tempFwdRate = fwdRate;
     pin_ptr<int> premiumPtr = &premium[0];
     int status = FXForwardRate(premiumPtr, &tempFwdRate);
     fwdRate = tempFwdRate;
     return status;
}

关于c# - 我可以通过 C++/CLI 包装器将 C# 数组传递给 C 指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7446779/

相关文章:

javascript - 将对象键转换为数组列表?

c++ - 获取 OpenCV Mat 中唯一像素值的列表

C#最有效的数据结构,可插入和删除下半部分

C# - 验证网站 URL。 IsWellFormedUriString 始终返回 true

c# - 查找对象中的空白字段 - C#

c# - String.Format - 从 C++ 迁移到 C#

c - C语言冒泡排序中额外零的问题

c - 如何禁止sprintf()警告 'directive writing between 1 and 11 bytes into a region of size 6 '

无法使用读/fgets/写到 C 中的标准输出来显示文件

java - 仅打印数组中的某些元素