
GetCrashMeasurement(LPCTSTR channelname,LPCTSTR propertIEs,LPCTSTR * Values,HANDLE error)
其中channelname和propertIEs是输入参数[in];和值是输出参数[out].
我也在使用C#应用程序中的Platform调用,如下所示:
[Dllimport("DrvCrashHAL.dll",EntryPoint = "coCRAL_GetCrashMeasurements")]public static unsafe extern CoStatus GetCrashMeasurements(string sChannel,string sMeasurements,ref string sValues,IntPtr hError); 从我的C#应用程序中,我按以下方式调用该函数:
string Text = "";intptr herror = intptr.zero;GetCrashMeasurements("channelname","",ref Text,herror); 但是然后我的程序完全停在这一行而没有抛出任何异常,我在输出窗口中看到的是以下消息:
Critical error detected c0000374Critical error detected c0000374The program '[4964] ProjectX.exe: Managed' has exited with code 0 (0x0).The program '[4964] ProjectX.exe: Native' has exited with code 0 (0x0).
我的猜测是,问题在于编组类型的LPCTSTR.
谁能告诉我我做错了什么或者指出了正确的方向?
提前致谢.
@R_419_6120@ 据我所知,你所提供的参数1,2和4应该很好.问题可能是参数3.错误c0000374是堆损坏.那很合适.
尝试解决问题的问题是要知道第三个参数的作用.它被声明为一种char **,作为[out]参数,我希望它作为char *输出.换句话说,我希望函数实际输出一个指针,而不是一个字符串,期望调用者将接收该指针并从中复制一个(以null结尾的)字符串.
您可以通过将入口点重新定义为int *或int **并传入intptr来调查此类调用.这样你应该(a)修复崩溃和(b)看到输出值(作为int或指针).您可能必须为此进行自己的编组.给定指向COM BSTR的指针,您可以轻松检索所需的值.
但是,根据我对Interop规范的解读,这应该可以正确处理字符串sValues而不是ref的声明.调用函数时会发生堆损坏,而不是在它返回时.
如果是技术性的话,这很有用:http://msdn.microsoft.com/en-us/magazine/cc164193.aspx.
我建议你先尝试一下.如果没有,可以尝试调试路由以查看您获得的指针.
总结以上是内存溢出为你收集整理的C#中LPCTSTR *的等价性是什么?全部内容,希望文章能够帮你解决C#中LPCTSTR *的等价性是什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)