【#CSharp #VCPP】P/Invokeの沼にハマってたぁ~ ガベージがいたずらしまくる(汗 (C++の部)
関連記事
- 【#Assembler】結局x64のアセンブラでゴニョゴニョと書き始めたオイラはバカかっ!(爆 【2024年05月13日(月)】
- 【#VCPP #VisualStudio】VS2022のVC 64ビットコンパイルでインラインアセンブラが使えなくなってるぞー 【2024年05月10日(金)】
- 【#CSHARP】ソリューション内でサービス,Winformアプリを混在で作成させ,バイナリ出力先を同じにするとサービスが起動しない 【2024年02月08日(木)】
- 【#CPP】出先でC++にてライブラリの緊急実装!脳死したーキョムリすぎるー 【2024年01月15日(月)】
- 【#PHP】謎な #Laravel 案件 引き渡したじ 【2024年01月11日(木)】
#TensorFlow の清書にまだ取りかかれん!
昨日の,TensorFlowがn個の物体検出を返してくる件 ⇒ その話
C++ <--> C#
間の構造体定義を弄ってたら,P/Invokeの沼にハマった(汗
C++側のTensorFlow関連情報構造体
#pragma pack(push, 8) typedef struct tag_TFCALLBACKARG_TFCAPTURE { BYTE* ImageBuf; //画像バッファ UINT ImageBufLen; //その長さ int ImageWidth; //画像幅 int ImageHeight; //画像高さ int ImageStride; //Y方向1LineのBYTE幅(C#のbitmapオブジェクトで使う) int DetectionNum; //物体検出数 int* DetectionX; //物体検出データ配列:X int* DetectionY; //物体検出データ配列:Y int* DetectionWidth; //物体検出データ配列:エリア幅 int* DetectionHeight; //物体検出データ配列:エリア高 int* DetectionClassID; //物体検出データ配列:物体識別ID float* DetectionScore; //物体検出データ配列:検出品質率 LPWSTR* DetectionTagName; //物体検出データ配列:物体名称 } TFCALLBACKARG_TFCAPTURE; #pragma pack(pop)C++からはコールバックでC#へこの情報を渡すべ
なんで,C#のデリゲート関数をC++に教えてあげないといけない
using CallbackFunctionPtr_TFCapture = LLONG(*)(TFCALLBACKARG_TFCAPTURE*, TFCALLBACKARG_TFCAPTURE*); ... CallbackFunctionPtr_TFCapture m_CallBackFunc_TFCapture = NULL; //クラス内のメンバとしてコールバック変数登録 ... ///-------------------------------------------------------------------- ///コールバックの設定 TFキャプチャ /// ///-------------------------------------------------------------------- LLONG HOGEHOGE::SetCallbackFuncTFCapture(CallbackFunctionPtr_TFCapture tmpFunc) { m_CallBackFunc_TFCapture = tmpFunc; return ERRORCODE_TFTM_OK; }スレッドループの中でコールバックを呼んであげましょう
///-------------------------------------------------------------------- ///スレッドループ /// ///-------------------------------------------------------------------- void HOGEHOGE::ThreadJobCore(int context) { TFCALLBACKARG_TFCAPTURE* tmpSource = new TFCALLBACKARG_TFCAPTURE; //情報構造体インスタンス生成 TFCALLBACKARG_TFCAPTURE* tmpDest = new TFCALLBACKARG_TFCAPTURE; CreateTFCALLBACKARG_TFCAPTURE(*tmpSource); //情報構造体物体検出データ配列群の生成 CreateTFCALLBACKARG_TFCAPTURE(*tmpDest); _RPTW0(_CRT_WARN, L"***thread Start\n"); while (m_ThreadActFL) { Sleep(1); if (m_CallBackFunc_TFCapture != NULL) { m_CallBackFunc_TFCapture(tmpSource, tmpDest); //C#側delegateの呼び出し(制御権がC#に移る) } } DestroyTFCALLBACKARG_TFCAPTURE(*tmpSource); //情報構造体物体検出データ配列群の破棄 DestroyTFCALLBACKARG_TFCAPTURE(*tmpDest); delete tmpSource; //情報構造体インスタンス破棄 delete tmpDest; _RPTW0(_CRT_WARN, L"***thread End\n"); m_ThreadEndFL = TRUE; }んでC#側やけど
長くなるんで文章を分けまする
C#側の話 ⇒ こちら
コメント
九州自動車道 トンネル内で大型トレーラーから出火 人吉~八代間で通行止め(24/7/26)
【#ご到着シリーズ】冷凍かしわ飯&冷凍かしわうどんセットに当選したモルモルモル
【#破局噴火】イエローストーンで大規模な水蒸気爆発が発生
暑すぎてダレてる.なんのやる気も起こらんドロドロドロ
【#Windows #CrowdStrike】セキュリティーソフト世界シェア1位があだ…ウィンドウズ障害、「過去最大規模」の見方も
3連休,らしい.これといって予定はない(爆
【#trump #shooting】トランプ暗殺未遂:トランプ氏 集会で発砲音「前大統領は無事」死者も
【#線状降水帯】九州北部山口県に線状降水帯発生予測情報発令(24/7/13)
【#落雷】今朝の雷,すごかったー 清武城かお隣のマンションに落雷したー共用部の電源落ちてるテレビが映らない!
【#彗星】紫金山アトラス彗星(C/2023 A3)がぶっ壊れた!今秋,見れると思ってたのにピエン