【发布时间】:2011-01-24 04:41:24
【问题描述】:
我想我必须创建一个托管 C++ 代码来包装本机 C++。但是我在尝试包装函数参数中使用的数组时遇到问题,该数组的类型是在本机 C++ 中定义的。本机C++代码如下:
//unmanageCPP.h
class __declspec(dllexport) unmanageMoney
{
public:
unmanageMoney(int a, int b) { rmb = a; dollar = b; }
unmanageMoney() { rmb = 0; dollar = 0; }
int rmb;
int dollar;
};
class __declspec(dllexport) unmanageSum
{
public:
//how to wrap this funciton?
int addDollar(unmanageMoney a[], unmanageMoney b[]);
};
//unmanageCPP.cpp
#include "unmanaged.h"
int unmanageSum::adddollar(unmanageMoney a[], unmanageMoney b[])
{
return a[0].dollar + b[0].dollar;
}
谁能告诉我如何编写manageCPP.h?非常感谢!
更新
我编写manageCPP.h如下,但我不知道怎么写addDollar()
//first, I wrap the class unmanageMoney for use in manageSum::addDollar()
public ref class manageMoney
{
private:
unmanageMoney* mMoney;
public:
unmanageMoney getMoney()
{
return *mMoney;
}
manageMoney(int a, int b) { mMoney = new unmanageMoney(a, b); }
~manageMoney() { delete mMoney; }
};
public ref class manageSum
{
// TODO: Add your methods for this class here.
private:
unmanageSum *mSum;
public:
manageSum()
{
mSum = new unmanageSum();
}
~manageSum()
{
delete mSum;
}
//it must be wrong if I code like this, for unmanageSun::adddollar() only
// receives unmanageMoney as arguments. So what should I do?
int adddollar(manageMoney a[], manageMoney b[])
{
return mSum->adddollar(a, b);
}
};
【问题讨论】:
-
@CDBean 如果您对问题有更新或需要提供更多详细信息,请编辑您的原始问题以包含新数据。
-
您可能需要
cli::array<manageMoney^> a作为addDollar的参数,这将在C# 中显示为manageMoney[] a。 -
对于
unmanagedSum::adddollar,您确定要unmanagedMoney a[]而不是const unmanagedMoney& a?您似乎只想要数组中的第一项,而这可以通过引用(或指针)来完成。 -
@Ben Voigt 是的,我也发现了。但是那应该怎么处理这个论点呢?我当前的解决方案是创建另一个类型为 unmanageMoney 的数组,并从 array
^a 复制其值。有没有更简单的方法?顺便问一下,这里的“^”是什么意思? -
@Jonathan Sampson 谢谢提醒