Re: [問題] 使用DllImport c#呼叫c++的method的轉換

看板C_Sharp (C#)作者 (我很可愛)時間13年前 (2012/07/27 09:21), 編輯推噓3(303)
留言6則, 2人參與, 最新討論串3/3 (看更多)
※ 引述《karcher (凡事量力而為)》之銘言: : 'DELB'印象中是一個定數 : 你可以去比對C++的值與C#計算出的值是否一致?? : int value = 'D' * 256 * 256 * 256 + 'E' * 256 * 256 + 'L' * 256 + 'B'; : ※ 引述《hatasum (我很可愛)》之銘言: : : 我想把c++的dll讓c#引用 : : 其中裡面有一個method : : extern "C" __declspec(dllexport) BOOL One_Method_INT(ULONG szMethod, int : : iArg, ULONG* pulReturnValue); : : 然後呼叫此方法是這樣呼叫的 : : : One_Method_INT('DELB', 1, &ulResult); : : 我在C#裡面使用DllImport來直接使用 : : [DllImport("WMIPort.dll")] : : static extern bool One_Method_INT(ulong szMethod, int iArg, UIntPtr : : pulReturnValue); : : 但是...卻卡住了 : : 我不知道在C#要怎麼設定'DELB'為ulong.......... : : 不知道大家有沒有類似的經驗??QQ : : 卡好久..... 感謝大家的協助!! 重新確認後確定'DELB'=0x44454c42 昨天可能鬼遮眼...... 但是我現在又卡住另一個問題.........QQ 我傳入 UIntPtr pulReturnValue = UIntPtr.Zero; bool result = One_Method_INT(0x44454c42, 1, pulReturnValue); 它顯示"嘗試讀取或寫入受保護的記憶體。這通常表示其他記憶體已損毀。" 如果'DELB'=0x44454c42是正確、iArg=1看起來似乎也不是問題... 那就是pulReturnValue的問題?? c++ : ULONG* pulReturnValue c# : UIntPtr pulReturnValue 不知道這樣是否為正確?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.211.38.194

07/27 10:58, , 1F
pulReturnValue不用先allocate memory嗎?
07/27 10:58, 1F

07/27 11:41, , 2F
@@樓上 抱歉 這部分我比較不熟 可以再詳細說明嗎??^^"
07/27 11:41, 2F

07/27 13:58, , 3F
其實C#我也是初學XD
07/27 13:58, 3F

07/27 14:03, , 4F
只是在想說UIntPtr.Zero是否能當refernce傳給dll填值?
07/27 14:03, 4F

07/27 14:07, , 5F
查了一下應該是可以...不過這邊是否能改用UInt32,然後
07/27 14:07, 5F

07/27 14:07, , 6F
傳ref進去?
07/27 14:07, 6F
文章代碼(AID): #1G4UqH1J (C_Sharp)
文章代碼(AID): #1G4UqH1J (C_Sharp)