[問題] 使用c++包成的dll回傳圖檔給c#秀出

看板C_and_CPP作者 (wi)時間13年前 (2012/05/02 16:18), 編輯推噓3(3049)
留言52則, 5人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) g++、vc# 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) opencv 問題(Question): 從c++的dll回傳圖片給c# 補充說明(Supplement): 請問該如何實現這個功能呢?? 目前是可以從c#丟圖給c++,但是回傳的時候一直無法成功 麻煩大家了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.125.20.92 diabloevagto:轉錄至看板 C_Sharp 05/03 00:18

05/03 00:34, , 1F
是不是要用到傳說中的COM Interop...
05/03 00:34, 1F

05/03 00:38, , 2F
不太清楚..google都找不到= =
05/03 00:38, 2F
※ 編輯: diabloevagto 來自: 140.125.20.92 (05/03 00:39)

05/03 00:43, , 3F
你指的回傳無法成功 是甚麼意思啊 你是怎麼呼叫到native c++
05/03 00:43, 3F

05/03 00:44, , 4F
的呢? 直接dllimport嗎
05/03 00:44, 4F

05/03 00:46, , 5F
我之前是用COM Interop, managed C# new一塊buffer
05/03 00:46, 5F

05/03 00:47, , 6F
[MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)]
05/03 00:47, 6F

05/03 00:47, , 7F
回傳圖的type是什麼? 如果你接受R+G+B三個byte的byte ar
05/03 00:47, 7F

05/03 00:47, , 8F
C#這種怪語法去pass到C++ dll去做一些操作 也不用return東西
05/03 00:47, 8F

05/03 00:47, , 9F
ry的話在C#分配好空間 C++ dll負責塞就好...
05/03 00:47, 9F

05/03 00:48, , 10F
QQ29大大搶先惹XD!
05/03 00:48, 10F

05/03 00:52, , 11F
請教,gcc/g++ 編的dll,給 vc / c# 可用 ?
05/03 00:52, 11F
我希望能夠從c++回傳一張圖給C#,因為我要把處理之後的影像秀出在picturebox 之前把圖從c#丟到c++是直接用DllImport傳bitmapdata.scan0過去然後用mat.data去接 現在要把圖從c++丟回c#想說也能直接這樣丟... 但一直失敗= = 其實用什麼方式回傳都可以,只要能正常秀圖就好

05/03 01:03, , 12F
toEdisonX:可以
05/03 01:03, 12F

05/03 01:05, , 13F
建議說明是怎麼個"失敗"法
05/03 01:05, 13F

05/03 01:07, , 14F
http://ppt.cc/nAgR 出現這樣圖,然後直接當掉= =
05/03 01:07, 14F

05/03 01:08, , 15F
其實我一點頭緒都沒有Orz
05/03 01:08, 15F
請問QQ29大大有成功寫過類似的程式嗎? 不知是否能借我參考看看該怎樣寫... ※ 編輯: diabloevagto 來自: 114.41.86.28 (05/03 01:38)

05/03 02:13, , 16F
你的dll的func有宣告是stdcall的calling convention嗎
05/03 02:13, 16F

05/03 02:13, , 17F
建議你先分離"dll工作傳回值"這件事情 例如做一個最簡
05/03 02:13, 17F

05/03 02:13, , 18F
單的 int add(int* in1, int* in2, int* out) 這樣子
05/03 02:13, 18F

05/03 02:26, , 19F
http://ppt.cc/se3; 這是我的dll檔
05/03 02:26, 19F

05/03 02:26, , 20F
p大,抱歉了...不太懂你說的那個東西
05/03 02:26, 20F

05/03 02:27, , 21F
但簡單的傳兩個值,及傳圖都有成功測試過了
05/03 02:27, 21F

05/03 02:31, , 22F
所以DLL_Add跟test都ok嗎?
05/03 02:31, 22F

05/03 02:31, , 23F
如果是showPic的話你的C#那邊應該要有cv::Mat對應的
05/03 02:31, 23F

05/03 02:31, , 24F
type definiation 然後我覺得接參數都要用pointer接
05/03 02:31, 24F

05/03 02:32, , 25F
C#那邊加ref這個keyword(吧我記得orz...這邊不確定)
05/03 02:32, 25F

05/03 02:32, , 26F
這邊應該沒有要用COM Interop吧? 不然接物件只能用
05/03 02:32, 26F

05/03 02:32, , 27F
IDispatch* 接 這可能就會回到前面QQ29大大的範圍了QQ
05/03 02:32, 27F

05/03 02:44, , 28F
http://ideone.com/7ioZP c#程式長這樣
05/03 02:44, 28F

05/03 02:45, , 29F
那幾個程式是都ok可以跑,傳過去沒有問題
05/03 02:45, 29F

05/03 02:46, , 30F
問題就在於從c++傳回來...我想法是一樣傳scan0過去
05/03 02:46, 30F

05/03 02:46, , 31F
然後把他指向新的圖的mat.data,但程式直接當掉...
05/03 02:46, 31F

05/03 02:53, , 32F
你是說你要改scan0這個pointer裡面存的address還是它
05/03 02:53, 32F

05/03 02:53, , 33F
指到的記憶體空間的內容@@?
05/03 02:53, 33F

05/03 03:01, , 34F
如果是後者~你lockbits不能傳imagelockmode.readonly~
05/03 03:01, 34F

05/03 03:02, , 35F
要傳readwrite呀 XD
05/03 03:02, 35F

05/03 03:02, , 36F
3點了QQ 睡覺! purincess.signOut();
05/03 03:02, 36F

05/03 03:09, , 37F
如果能夠直接改指向的位址當然最快
05/03 03:09, 37F

05/03 03:09, , 38F
不然要一個一個寫進去比較花時間
05/03 03:09, 38F

05/03 03:10, , 39F
我太懂c#語法,這個是看到有人寫這樣就拿來用
05/03 03:10, 39F

05/03 03:10, , 40F
請問我該如何改才能夠修改呢??
05/03 03:10, 40F

05/03 03:11, , 41F
另外請教是否有方式能少到bitmapdata??能直接用
05/03 03:11, 41F

05/03 03:11, , 42F
bitmap型態呢?這樣應該能在省一點時間吧
05/03 03:11, 42F
c# code http://ideone.com/zZ9Mg c++ code http://ideone.com/UcoLa 我這樣雖然不會出錯了 但是圖片都是整片黑色的... 不知道是不是沒有傳回來... ※ 編輯: diabloevagto 來自: 140.125.20.92 (05/03 14:35)

05/03 17:55, , 43F
你的stride是2*960 然後imread第二個參數是0 會讓我覺得
05/03 17:55, 43F

05/03 17:56, , 44F
你的format8ppindexed應該要是Format16bppGrayScale @@
05/03 17:56, 44F

05/03 17:56, , 45F
但我不知道imread第二個參數0的data長怎樣orz 我只用過
05/03 17:56, 45F

05/03 17:56, , 46F
正數讀彩圖QQ
05/03 17:56, 46F

05/03 21:17, , 47F
imread設定0表示讀進來的是256灰階
05/03 21:17, 47F

05/03 21:17, , 48F
用Format8bppIndexed沒錯,我改成你那個就出錯了
05/03 21:17, 48F

05/03 21:18, , 49F
我是猜測會不會是pixel資訊沒有回傳回來
05/03 21:18, 49F

05/03 21:38, , 50F
stride我用i*960,i從1~20都是黑色的
05/03 21:38, 50F

05/03 21:49, , 51F
嗯嗯 QQ
05/03 21:49, 51F

05/03 22:06, , 52F
真的是囧到底
05/03 22:06, 52F
文章代碼(AID): #1FeLuyuO (C_and_CPP)
文章代碼(AID): #1FeLuyuO (C_and_CPP)