作者hatasum (我很可愛)
看板C_Sharp
標題Re: [問題] 使用DllImport c#呼叫c++的method的轉換
時間Fri Jul 27 09:21:18 2012
※ 引述《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
推 lwecloud:pulReturnValue不用先allocate memory嗎? 07/27 10:58
→ hatasum:@@樓上 抱歉 這部分我比較不熟 可以再詳細說明嗎??^^" 07/27 11:41
推 lwecloud:其實C#我也是初學XD 07/27 13:58
→ lwecloud:只是在想說UIntPtr.Zero是否能當refernce傳給dll填值? 07/27 14:03
推 lwecloud:查了一下應該是可以...不過這邊是否能改用UInt32,然後 07/27 14:07
→ lwecloud:傳ref進去? 07/27 14:07