C#中LPCTSTR *的等价性是什么?

C#中LPCTSTR *的等价性是什么?,第1张

概述我有一个非托管的C函数驻留在我从C#应用程序调用的Dll中.这是函数的签名: GetCrashMeasurement(LPCTSTR channelName, LPCTSTR properties, LPCTSTR * Values, HANDLE error) 其中channelName和properties是输入参数[in];和值是输出参数[out]. 我也在使用C#应用程序中的Platfor 我有一个非托管的C函数驻留在我从C#应用程序调用的Dll中.这是函数的签名:

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 *的等价性是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1230634.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存