Я полагаю, что мне нужно создать управляемый код на C++ для переноса нативного C++. Но у меня возникла проблема при попытке обернуть массив, используемый в параметре функции, тип которого задан в native 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? Огромное спасибо!
Update
я сочинить 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 Если у вас есть обновления по вашему вопросу или более подробная информация для предоставления, пожалуйста, отредактируйте исходный вопрос, чтобы включить новые данные. – Sampson
Вы, вероятно, хотите 'cli :: array a' для ваших аргументов' addDollar', это будет отображаться на C# как 'manageMoney [] a'. –
Для 'unmanagedSum :: adddollar', вы уверены, что хотите' unmanagedMoney a [] ', а не' const unmanagedMoney & a'? Кажется, вам нужен только первый элемент в массиве, который может быть сделан с помощью ссылки (или указателя). –