以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  VC和C#的类型转换  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=75929)


--  作者:卷积内核
--  发布时间:7/9/2009 11:10:00 AM

--  VC和C#的类型转换
编程论坛  楼主

有谁知道在VC中的LPTSTR对应C#中的类型是什么?
如int GetJobClientId(DWORD dwPrnID,LPTSTR lpJobClientId);转换为对应C#的应该是怎么写的?

编程论坛 1 个网友回答:


C# code
[ DllImport( "dllfile.dll", CharSet=CharSet.Auto )]
int GetJobClientId(uint32 dwPrnID,StringBuilder lpJobClientId);

编程论坛 2 个网友回答:

谢谢楼上的朋友!
我用了你说的方法,但是lpJobClientId返回来的是乱码,这个怎么解决。

我的应用如下:
[DllImport("FXPIFAPI.DLL", CharSet = CharSet.Auto)]
public static extern int fxSNMP_GetJobClientId(uint dwPrnID, [MarshalAs(UnmanagedType.LPTStr)]StringBuilder cJobCID);


[MarshalAs(UnmanagedType.LPTStr)]
private static StringBuilder strbuder = new StringBuilder();

iStatus = PDMONANDPDIK.fxSNMP_GetJobClientId(m_dwPrnID, strbuder);//strbuder回来是乱码,帮忙看看怎么解决

CharSet.Auto

改为CharSet.Ansi或者CharSet.Unicode试试看


  

编程论坛 4 个网友回答:

还是一样的,返回来的是乱码.


  

编程论坛 5 个网友回答:

提醒下:
StringBuilder不进行设置,默认初始分配16个字符长度
private static StringBuilder strbuder = new StringBuilder(); 这里最好初始化下一合适大小的长度。如:
private static StringBuilder strbuder = new StringBuilder(256);
去掉[MarshalAs(UnmanagedType.LPTStr)]试试。



  

编程论坛 6 个网友回答:

微软官方例子
http://msdn.microsoft.com/zh-cn/library/x3txb6xc.ASPx



  

编程论坛 7 个网友回答:

解决的了,要用byte[]来解决。



W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
9,238.281ms