.NET调用DLL返回值问题

a522134398 2014-07-14 11:18:05
DLL方法名:GetParam
[功能定义]
HRESULT WINAPI GetParam(HANDLE pDataHandle, LPCTSTR paramName, LPTSTR ParamValue, UINT nMaxValueLenth)
[功能描述]
该接口函数用于取返回参数。
[参数说明]
HANDLE pDataHandle:功能调用的处理句柄,由接口函数CreateInstace()创建。
LPCTSTR paramName:返回变量的参数名称。
LPTSTR ParamValue:保存返回值的变量。
UINT nMaxValueLenth:变量ParamValue的分配内存字节数。
==================================================================
C# Code
声名:
[DllImport("HNBridge.dll")]
public static extern long GetParam(long pDataHandle, string paramName,
ref StringBuilder prtStr, int nMaxValueLenth);

调用:

StringBuilder mes= new StringBuilder(1024);
his_result = GetParam(handle, "MSG",ref mes, mes.Capacity);


为什么mes总是获取不到返回值,求大神打救。怎样才能获取到返回值???

...全文
256 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xian_wwq 2014-07-15
  • 打赏
  • 举报
回复
引用 7 楼 a522134398 的回复:
[quote=引用 4 楼 xian_wwq 的回复:] [quote=引用 楼主 a522134398 的回复:] DLL方法名:GetParam [功能定义] HRESULT WINAPI GetParam(HANDLE pDataHandle, LPCTSTR paramName, LPTSTR ParamValue, UINT nMaxValueLenth) [功能描述] 该接口函数用于取返回参数。 [参数说明] HANDLE pDataHandle:功能调用的处理句柄,由接口函数CreateInstace()创建。 LPCTSTR paramName:返回变量的参数名称。 LPTSTR ParamValue:保存返回值的变量。 UINT nMaxValueLenth:变量ParamValue的分配内存字节数。 ================================================================== C# Code
声名:
       [DllImport("HNBridge.dll")]
public static extern long GetParam(long pDataHandle, string paramName,
ref StringBuilder prtStr, int nMaxValueLenth);
调用:

         StringBuilder mes= new StringBuilder(1024);
         his_result = GetParam(handle, "MSG",ref mes, mes.Capacity);
为什么mes总是获取不到返回值,求大神打救。怎样才能获取到返回值???
在DLLImport中加上 CharSet = CharSet.Ansi再试试。 一般情况下, c++:LPTSTR 输出变量名 ---- c#:StringBuilder 输出变量名 使用了StringBuilder就不需要ref了。 his_result 是不是0?会不会是函数调用有别的特殊要求? [/quote] 现在可以返回了,但是StringBuilder读出来的是乱码,请问如何解决是好?[/quote] 从没有返回到返回乱码,也是个进步, 讲讲这中间你做了什么修改,这样也好帮你分析呀。 其实还有个更直接的,找dll的提供方,询问有没有什么特殊约定
bdmh 2014-07-14
  • 打赏
  • 举报
回复
可能dll并不返回新内容,所以你先搞清楚dll的作用,有没有返回
a522134398 2014-07-14
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
去掉 ref 试试
试过了,还是不行。是不是DLL没有把返回值写到StringBuilder里面去?
bdmh 2014-07-14
  • 打赏
  • 举报
回复
a522134398 2014-07-14
  • 打赏
  • 举报
回复
引用 4 楼 xian_wwq 的回复:
[quote=引用 楼主 a522134398 的回复:] DLL方法名:GetParam [功能定义] HRESULT WINAPI GetParam(HANDLE pDataHandle, LPCTSTR paramName, LPTSTR ParamValue, UINT nMaxValueLenth) [功能描述] 该接口函数用于取返回参数。 [参数说明] HANDLE pDataHandle:功能调用的处理句柄,由接口函数CreateInstace()创建。 LPCTSTR paramName:返回变量的参数名称。 LPTSTR ParamValue:保存返回值的变量。 UINT nMaxValueLenth:变量ParamValue的分配内存字节数。 ================================================================== C# Code
声名:
       [DllImport("HNBridge.dll")]
public static extern long GetParam(long pDataHandle, string paramName,
ref StringBuilder prtStr, int nMaxValueLenth);
调用:

         StringBuilder mes= new StringBuilder(1024);
         his_result = GetParam(handle, "MSG",ref mes, mes.Capacity);
为什么mes总是获取不到返回值,求大神打救。怎样才能获取到返回值???
在DLLImport中加上 CharSet = CharSet.Ansi再试试。 一般情况下, c++:LPTSTR 输出变量名 ---- c#:StringBuilder 输出变量名 使用了StringBuilder就不需要ref了。 his_result 是不是0?会不会是函数调用有别的特殊要求? [/quote] 现在可以返回了,但是StringBuilder读出来的是乱码,请问如何解决是好?
shockcqyc 2014-07-14
  • 打赏
  • 举报
回复
[DllImport("HNBridge.dll",CharSet = CharSet.Ansi)] public static extern long GetParam(long pDataHandle, string paramName, StringBuilder prtStr, int nMaxValueLenth); StringBuilder mes= new StringBuilder(1024); his_result = GetParam(handle, "MSG",mes, mes.Capacity); 最好是将你的函数原型发上来看看
md5e 2014-07-14
  • 打赏
  • 举报
回复
[DllImport("HNBridge.dll")]这个文件是放哪里的?
xian_wwq 2014-07-14
  • 打赏
  • 举报
回复
引用 楼主 a522134398 的回复:
DLL方法名:GetParam [功能定义] HRESULT WINAPI GetParam(HANDLE pDataHandle, LPCTSTR paramName, LPTSTR ParamValue, UINT nMaxValueLenth) [功能描述] 该接口函数用于取返回参数。 [参数说明] HANDLE pDataHandle:功能调用的处理句柄,由接口函数CreateInstace()创建。 LPCTSTR paramName:返回变量的参数名称。 LPTSTR ParamValue:保存返回值的变量。 UINT nMaxValueLenth:变量ParamValue的分配内存字节数。 ================================================================== C# Code
声名:
       [DllImport("HNBridge.dll")]
public static extern long GetParam(long pDataHandle, string paramName,
ref StringBuilder prtStr, int nMaxValueLenth);
调用:

         StringBuilder mes= new StringBuilder(1024);
         his_result = GetParam(handle, "MSG",ref mes, mes.Capacity);
为什么mes总是获取不到返回值,求大神打救。怎样才能获取到返回值???
在DLLImport中加上 CharSet = CharSet.Ansi再试试。 一般情况下, c++:LPTSTR 输出变量名 ---- c#:StringBuilder 输出变量名 使用了StringBuilder就不需要ref了。 his_result 是不是0?会不会是函数调用有别的特殊要求?

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧