读书人

web services调用vc dll的字符串参数有

发布时间: 2012-02-01 16:58:19 作者: rapoo

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代码里内存,返回值等问题...



读书人网 >Web Service

热点推荐