求助,Delphi字符串问题,100分不够再加 ( 积分: 100 )

  • 主题发起人 主题发起人 wenx
  • 开始时间 开始时间
W

wenx

Unregistered / Unconfirmed
GUEST, unregistred user!
我用DELPHI写了个ISAPI的WEBSERVICE程序,用DELPHI写的客户端调用很正常,当我用C#写的客户端在调用时返回的字符串的值都成了"?????????".

WENBSERVICE中的返回值为String,客户端程序自动WideString,C#中为string类型.
C#的string本身就是支持Unicode,为什么还会出现这种问题?

分不够可以加,只要能把问题解决.
 
我用DELPHI写了个ISAPI的WEBSERVICE程序,用DELPHI写的客户端调用很正常,当我用C#写的客户端在调用时返回的字符串的值都成了"?????????".

WENBSERVICE中的返回值为String,客户端程序自动WideString,C#中为string类型.
C#的string本身就是支持Unicode,为什么还会出现这种问题?

分不够可以加,只要能把问题解决.
 
String类型再C中使用是会出问题的,建议改成pChar~另外调用库接口也不能使用String~
 
大哥,这是Web Service程序,改成PChar会报错的,不是动态链接库
 
dfrandys 是正解
 
可以用WideString;
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3171075
 
WideString用了,结果一样
 
麻烦事情啊。不要使用string传递啊。特别是还要使用非delphi的调用时。改成pchar吧,或者使用variant类型,这个虽然麻烦。却好用。
 
fengfan我已经说过了,是Web Service程序,没法改.

bundur看来咱俩是同命相连呀,大家帮帮忙啊.
 
String 根不同的开发环境有不同解释,还是用LPTSTR或LPCTSTR之类的吧,楼主有见过参数是String的Win32 API函数吗?我至今从未看到过,Web Service程序还是要改的。
 
cyradg我已经说过了,这是Web Service的程序,不是Win32 API的程序,这个是要放到IIS里执行的,改成PChar是要报错的.

不是我不改,是没办法改.
 
举例,很简单:
MSDN的:
int GetWindowText(
HWND hWnd, // handle to window or control with text
LPTSTR lpString, // address of buffer for text
int nMaxCount // maximum number of characters to copy
);
你有见过:
String GetWindowText(HWND hWnd);??????
改吧~~~~~~~~~
 
cyradg不知道你用没用过Web Service,不知道你了解不了解Web Service的机制,这和Win32 API是截然不同的概念,如果是单纯的Win32 API的调用方法我根本不会来问的.
 
做网页??那是和API不一样,不好意思,那就不太懂,那个Web Service是链库还是什么其它的??
 
bundur最后说使用 TByteDynArray 显示正常,那就在Web Service再加一个函数,专供C#调用,我不懂,不要砸我。
 
楼主应该首先排除字符集的影响,可以先完全用英文,看是否有乱码。

我用JAVA做的WEB SERVICE服务器,DELPHI的客户端,没有出乱码问题。字符串也是用WIDE STRING。(WIDE STRING 是UNICODE的,并不是BORLAND私有的类型)
 
简单的说Web Service提供的是通用接口,典型的三层模式,以XML形式发布接口并返回执行结果,所以跟PChar没有关系.
 
to 沙隆巴斯的主人:

用英文和数字等都没有问题,只要是双字节的东西就会出现?????

而且反过来我用C#做的WebService用Delphi来调,返回的结果可以正常显示,但传过去的参数为NULL,其实和这个问题是一样的,难道非得让我用Base64,我实在不想用,影响效率的.
 
楼主的问题很显然是字符集问题了。
你可以尝试去设置下。东方字符集各语言的处理是不一致的,你可以去设置一下。
 
后退
顶部