[問題] C# 引用 C 開發的DLL檔宣告方式

看板C_Sharp (C#)作者 (好笑)時間10年前 (2014/10/28 18:02), 編輯推噓3(309)
留言12則, 3人參與, 最新討論串1/1
大家好 最近在寫一些sample code 目前要在C#(VC2005)去引用在C(VC2005)環境下開發的DLL檔 首先要讀取一個名為Text.txt的檔案,正確回傳err =0, 錯誤回傳 非0 值 在C下的函數原型 I32 PostionData_F64(const wchar_t* FileName,U32* PosCount,POS_DATA * PosArray); 宣告: I32 error = 0; unsigned long cnt = 0; //cnt 為資料筆數 POS_DATA* PSdata;//資料結構 typedef struct _POS_DATA { U32 opt; F64 A; F64 B; } POS_DATA, *PPOS_DATA; static const wchar_t filet[] = L"Text.txt";//此text.txt為要讀取之檔案名稱 然後程式開始 err = PostionData_F64( filei, &cnt, PSdata ); ================= 以下為C#的宣告 =========== [DllImport("ABCDE.dll")] public static extern Int32 PosData_F64(string FileName,ref System.UInt32 cnt, ref POS_DATA PosArray); static string filet = "Text.txt"; Int32 err = 1; UInt32 cnt = 0; POS_DATA PSdata = new POS_DATA(); 程式開始 err = ADCNC2.PosData2_FileLoad_F64(filet, ref cnt, ref PSdata); 結果回傳錯誤代碼,從代碼可推測的確有call 到 DLL的function 但可能是檔案名稱不對或是路徑不對,確認過後應該不是路徑問題 會不會是從C的檔案名稱宣告 static const wchar_t filet[] = L"Text.txt"; 轉成C#的語法 static string filet = "Text.txt"; 這樣就不對了呢~~~ 還請各位多多指教 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 210.59.165.169 ※ 文章網址: http://www.ptt.cc/bbs/C_Sharp/M.1414490563.A.2BA.html

10/28 18:16, , 1F
朝\0 最後一個字元 試試看? 還是wchar 和 char
10/28 18:16, 1F

10/28 18:16, , 2F
不過印象中 wchar 和 char好像沒差
10/28 18:16, 2F

10/28 18:33, , 3F
請問朝 \0 最後一個字元試試 是指什麼意思?
10/28 18:33, 3F

10/28 18:43, , 4F
就是..字串結尾是\0 ,可是你的字元陣列是這樣嗎
10/28 18:43, 4F

10/28 18:43, , 5F
大一過後就沒碰C了阿..不過上次有人問我類似
10/28 18:43, 5F

10/28 18:43, , 6F
問題也是這樣解決的
10/28 18:43, 6F

10/28 18:45, , 7F
或者你C# 寫一個 char[8] 裡面塞你的檔名看看
10/28 18:45, 7F

10/28 18:47, , 8F
或是DLL丟過來我幫你測XD
10/28 18:47, 8F

10/28 21:54, , 9F
你要不要試試看檔名直接用絕對路徑+檔名?
10/28 21:54, 9F

10/29 08:57, , 10F
絕對路徑的方式試過了無效 ~~
10/29 08:57, 10F

10/30 14:37, , 11F
在dllimport 加上
10/30 14:37, 11F

10/30 14:37, , 12F
[MarshalAsAttribute(UnmanagedType.LPWStr)]
10/30 14:37, 12F
文章代碼(AID): #1KJsd3Aw (C_Sharp)
文章代碼(AID): #1KJsd3Aw (C_Sharp)