web services调用vc dll的字符串参数问题
代码如下:
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Runtime.InteropServices; //要添加这个才能使用动态链接库kernel132.dll中的非托管代码
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
[DllImport("OCRDLL.dll", SetLastError = true,CharSet = CharSet.Unicode)]//引入vc 的dll
public static extern string ocrimage(string name);//给dll函数传参数
public Service () {
//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}
[WebMethod]
public string userDLL(string name)
{
string urlName = name;
string Result = ocrimage(urlName);
return Result;
}
}
正遇到这个问题,就是调用public static extern string ocrimage(string name)函数并给它传字符串参数,在dll得到的是乱码,请大侠帮忙解答,解决马上给分
[解决办法]
[DllImport("OCRDLL.dll", SetLastError = true,CharSet = CharSet.Unicode)]//引入vc 的dll
public static extern string ocrimage(IntPtr name);//给dll函数传参数
IntPtr str= System.Runtime.InteropServices.Marshal.StringToBSTR(urlName)
string Result = ocrimage(str);
试试,你vC的dll里的字符串是那种?你再看看Marshal里的其他方法看看
[解决办法]
试试,你vC的dll里的字符串是那种?你再看看Marshal里的其他方法看看
[解决办法]
你的这个问题我也遇到过:
public static extern string ocrimage(string name);//给dll函数传参数
1.
其参数你传的是个字符串,
你要找到你的VC源DLL代码,你把它改成字符数组或是指针的形式,而不要CString;
2.注意编码问题:
CharSet = CharSet.Unicode
VC里默认的是ACISS码,你应该改成C#里的UNICEODE码;故改成:CharSet = CharSet.Ansi;
我遇到的你的问题我就是这样解决的.....如果还有问题,要仔细检查VC代码里内存,返回值等问题...