第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

如何通過 DllImport 將雙精度數(shù)組從 C# 傳遞到 C++

如何通過 DllImport 將雙精度數(shù)組從 C# 傳遞到 C++

C#
千巷貓影 2023-07-22 18:12:23
我有一個(gè) C++ 函數(shù),其方法簽名為MyMethod(std::vector<double> tissueData, std::vector<double> BGData, std::vector<double> TFData, std::vector<double> colMeans, std::vector<double> colStds, std::vector<double> model)我希望通過 dllimport 在 C# 中調(diào)用這個(gè) C++ 函數(shù)。在創(chuàng)建 dll 庫時(shí),我已將 C++ 端的函數(shù)定義為extern "C" __declspec(dllexport) int MyMethod(double *tissue, double *bg, double *tf, double *colMeans, double *colStds, double* model);我計(jì)劃將一個(gè)雙精度數(shù)組從 c# 端傳遞到 c++ dll 函數(shù)。但是,我不確定應(yīng)該如何從 C# 端定義 DllImport 以及當(dāng)我將其解析為 dllImport 函數(shù)時(shí)應(yīng)該如何轉(zhuǎn)換雙精度數(shù)組?我讀了一些關(guān)于編組的內(nèi)容,但我仍然不太明白,我不確定它是否可以應(yīng)用在這里?
查看完整描述

1 回答

?
冉冉說

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊

您不能與 C++ 類(例如std::vector)進(jìn)行互操作,只能與基本的 C 樣式數(shù)據(jù)類型和指針進(jìn)行互操作。(作為旁注)這是 Microsoft 在發(fā)明 COM 時(shí)試圖解決的問題之一。


為了使其工作,您應(yīng)該導(dǎo)出一個(gè)不同的函數(shù),該函數(shù)接收純 C 數(shù)組及其各自的長度:


C++端

extern "C" __declspec(dllexport) int MyExternMethod(

    double *tissue, int tissueLen, 

    double *bg, int bgLen,

    /* ... the rest ... */

);


// implementation

int MyExternMethod(

    double* tissue, int tissueLen, 

    double* bg, int bgLen,

    /* ... the rest ... */ )

{

    // call your original method from here:


    std::vector<double> tissueData(tissue, tissue + tissueLen);

    std::vector<double> bgData(bg, bg + bgLen);

    /* ... the rest ... */


    return MyMethod(tissueData, bgData, /* ...the rest... */);

}

C# 端的互操作導(dǎo)入為:


C#端

public static class MyLibMethods

{

    [DllImport("MyLib.dll", CallingConvention = CallingConvention.Cdecl)]

    public static extern int MyExternMethod(

        double[] tissue, int tissueLen,

        double[] bg, int bgLen,

        /*...the rest...*/

    );

}

你可以在 C# 中這樣調(diào)用它:


C#端

public int CallMyExternMethod(double[] tissue, double[] bg, /*... the rest ...*/)

{

    return MyLibMethods.MyExternMethod(

        tissue, tissue.Length,

        bg, bg.Length,

        /*...the rest...*/

    );

}


查看完整回答
反對 回復(fù) 2023-07-22
  • 1 回答
  • 0 關(guān)注
  • 191 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號