用vc6开发的ALT简单控件,拥有一个方法
STDMETHODIMP CTestString::GetString(BSTR strIn, BSTR *pVal)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState()) // TODO: Add your implementation code here
CString str = _com_util::ConvertBSTRToString(strIn); *pVal = _com_util::ConvertStringToBSTR(str); return S_OK;
}该方法什么都不干,接收一个输入字符串,然后将其输出,但是在ASP或ASPX DOTNET1.1环境中调用该组件方法,输入字符串参数均有大小限制,超过一定大小(6万字节左右)就会报错,但是奇怪的是用vc6编程序调用或者使用ASPX DOTNET2.0以上环境使用,则所输入字符串大小无限制,受windows2003下iis6限制至少200k是没问题的,不知何故,请高手赐教。谢谢

解决方案 »

  1.   

    是不是要配置一下ASPX DOTNET1.1环境?没遇到过,不太清楚。
      

  2.   

    http://www.codeproject.com/KB/bugs/bug_in__bstr_t_amp__varia.aspx
      

  3.   

    关于内存的问题,建议看看windows核心编程,虽然与你问题的解决关系不大
      

  4.   

    2楼的帖子受益匪浅,但是不是问题的根本原因。ConvertBSTRToString的最大限制是2000000,我的问题是60000左右字节就会出错,而且错误不是出在ConvertBSTRToString函数上,是出在调用GetString方法的输入输入参数上。因为在DOTNET2.0环境或这vc6编写的程序中调用该方法是成功执行的。我问的问题就是COM组件方法的字符串参数是否有大小限制?
      

  5.   

    *pVal = _com_util::ConvertStringToBSTR(str); 
    改成
    *pVal = str.AllocSysString();
      

  6.   

    对字符串长度本身都没有限制,只受内存够不够影响。
    注意一点:ConvertStringToBSTR只接受ANSI串作为参数,如果你的组件是在UNICODE下编译的就会有问题,因为CString保存的串是UNICODE编码,如果使用CString::AllocSysString则不必担心编码的问题。不过应该不是这个原因,因为如果在UNICODE下编译不会通过。
      

  7.   

    你先别看在什么环境下支持多少,你写一个静态html页面,然后在java script中写函数来调用,看看到底能支持多少,如果和长度没有关系,则确定是平台的限制