作者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
1F:推 lwecloud:pulReturnValue不用先allocate memory吗? 07/27 10:58
2F:→ hatasum:@@楼上 抱歉 这部分我比较不熟 可以再详细说明吗??^^" 07/27 11:41
3F:推 lwecloud:其实C#我也是初学XD 07/27 13:58
4F:→ lwecloud:只是在想说UIntPtr.Zero是否能当refernce传给dll填值? 07/27 14:03
5F:推 lwecloud:查了一下应该是可以...不过这边是否能改用UInt32,然後 07/27 14:07
6F:→ lwecloud:传ref进去? 07/27 14:07