【#CSharp #VCPP】P/Invokeの沼にハマってたぁ~ ガベージがいたずらしまくる(汗 (C++の部)
関連記事
- 【#CSharp】C#が2025年「プログラミング言語オブ・ザ・イヤー」獲得 【2026年01月16日(金)】
- 【memory leak】メモリーリーク発生...ドロドロドロ 【2025年10月27日(月)】
- う~~忙しい!あ~~忙しい!! 【2025年09月24日(水)】
- なんと!今週の土曜日も仕事してますた.来週の土曜日も仕事臭い.TCPソケット通信をゴリゴリ書いてる 【2025年08月30日(土)】
- 【ChatGPT o4】祝日なのに仕事ーバテすぎー今夜こそ絶命だーモルモルモル 【2025年03月20日(木)】
#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#側の話 ⇒ こちら

コメント
広島カープの羽月隆太郎容疑者、「ゾンビたばこ」使用の疑いで逮捕
【#総選挙】衆議院選挙 きょう公示 12日間の選挙戦へ
青森 スノーモービル乗るため入山の約10人と連絡取れず 遭難か
【#不発弾】宮崎市中心部の不発弾 17日に処理 避難指示や交通規制予定(26/1/17)
【総選挙】立民 公明 衆院選に向け新党結成で合意(26/1/15)
【大雪】大雪と雷及び突風に関する全般気象情報 第3号(26/1/1)
ブルーレイはオワコン? ソニー生産終了が意味する「次世代メディア」の失敗
ビジネスホテルで火事 1人遺体で見つかる 宿泊客4人けが 水戸
【#ドラセナ】御神木たる幸福の木(ドラセナ):花芽がほころびだした!すごい香りで部屋が満たされてる!