这是我的 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/