簡體   English   中英

如何從C#調用C ++類

[英]How to call C++ class from C#

我想我必須創建一個托管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);
    }

};

您使用創建C ++ / CLI源文件

public ref class SomethingOrOther
{
    //...
};

並設置編譯選項以使用/clr選項。

除此之外,它幾乎與編寫本機C ++相同。 你將#include要重用的類的頭文件,創建實例並調用它們的成員函數,就像普通的C ++一樣。 但是C#可以看到ref class任何內容。

而且你不要在類上放置__declspec(dllexport) 永遠不會。 它對函數很有用,但在與類一起使用時會產生不良影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM