我用MFC的ACTIVEX写了一个OCX控件,DEBUG版本好好的,可是DEBUGU和RELEASEU版本的传入数据不对,我用的是LPCTSTR作为 传入数据的形参可是INVOKE后,数据(字符串)变的不认识了,所以,我的处理不起作用了。请高手指点!

解决方案 »

  1.   

    检查一下你的一些变量的初始化问题,DEBUG版由于调试的需要会为你的变量自动初始化,而RELEASEU版必须自己进行。
      

  2.   

    我用ACTIVE CONTROL TEST CONTAINER测试的,当我用INVOKE时(我事先设了断点)跟踪进去时如我输入的是“我要做一个程序员”变成了“{"b亯ZP"}”了,输入函数为:
    void CAnalysisCtrl::SetString(LPCTSTR InString) 
    {
    midString=InString;
    ……………………
      

  3.   

    初始化了:
    void CAnalysisCtrl::SetString(LPCTSTR InString) 
    {
    midString="";
    midString=InString;
    还是不行
    {"b/f?梍剉梍"}
      

  4.   

    我在OCX中用 AfxMessageBox(midString);
    可以正确输出。
    没有BSTR只有BSTR FAR *不知怎么用?
      

  5.   

    CString( LPCTSTR lpch, int nLength );
    throw( CMemoryException );midString = CString(InString, strlen(InString));
      

  6.   

    改成char* 试试?
    strcpy()
      

  7.   

    用BSTR 试试了
    MIDSTRING只剩了一个字符了。
      

  8.   

    midString = CString(InString, 2*lstrlen(InString));试了,依旧。
    是不是我的VC++出问题了。
      

  9.   

    初始化要用strcpy(midString,""),赋值的时候最好都用strcpy,因为直接的赋值是将内存中字符串的首地址传给midString,每次赋值都会改变它。处理时就会有问题。
      

  10.   

    因为strcpy是用InString从midString中存放的字符串首地址往后覆盖,不会改变它在内存中的位置。
      

  11.   

    C:\Documents and Settings\王\Analysis\AnalysisCtl.cpp(529) : error C2664: 'strcpy' : cannot convert parameter 1 from 'class CString' to 'char *'
            No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
    C:\Documents and Settings\王\Analysis\AnalysisCtl.cpp(530) : error C2664: 'strcpy' : cannot convert parameter 1 from 'class CString' to 'char *'
            No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
    AnalysisPpg.cpp
    Generating Code...
    Error executing cl.exe.Analysis.ocx - 2 error(s), 0 warning(s)
      

  12.   

    注意:我用了debugU是用了_UNICODE的,STRCPY不能用。
    我想将CONST SHORT*转换成CONST CHAR*再转换成CSTRING是不是可以。
    因为我的8个汉字成了8个字母(勉强可以这么说),是不是每个汉字的高字节编码被覆盖了?
      

  13.   

    不好意思,没看清楚。
    先要将InString转换成字符串才可以。
      

  14.   

    我也不是高手,侯捷的MFC还没看完呢,呵呵。
      

  15.   


    处理方法一:
    如果你的ocx也是为其它vc应用程序服务,那么,建议debug和release版本都用非UNICODE方式编译,问题应该能解决,而且调用界面也简单。处理方法二:
    如果ocx是用UNICODE方式编译,那么用MultiByteToWideChar将char *类型的东西转换为wchar_t *类型的东西,至于宽字符和单字符串转换,有很多方法,用WideCharToMultiByte是最直接的方法。wchar_t*型字符串现在是c语言的标准,wcscat系列runtime函数一定要过关,否则,你很难在将来的windows上有所作为了。