情况是这样的:
想在VC中做一个包含某函数的DLL,该DLL会被其他人用C#语言调用。
该函数输入为一个字符串a,做一些处理后再输出一个字符串b
该函数内部都是用CString对字符串进行操作的,字符编码就是ANSI。现在想问请教一下:
假设输入输出都定义为该函数的参数,
(1)这两个参数应该分别怎么定义?(char* ?_bstr_t ? _bstr_t* ?)
(2)我在VC里面应该怎么将a转换成CString?CString又该怎么转换b输出?
(3)C#中应该怎么把字符串a传进来?又该怎么取传出的字符串b?唉,都快急死。非常感谢 Orz Orz

解决方案 »

  1.   

    别人教我这样写参数 Func(_bstr_t inputstr, _bstr_t* outputstr)
    {
    CString mystr = (char*)inputstr;
    SysFreeString(inputstr);
    CString mystrnew;//...对mystr进行一系列操作
    //...得到mystrnew(*outputstr) = mystrnew.AllocSysString();
    }但是在C#里面该怎么传入字符串,又该怎么将传出的字符串该取出呢
      

  2.   

    参考
    http://msdn.microsoft.com/zh-cn/library/fzhhdwae%28v=VS.90%29.aspx
      

  3.   

    ls正解,互相转换见下面一段代码
    #include <commctrl.h>
    #pragma  comment(lib,"Comctl32.lib")
     ConvertStringToBSTR(const char* pSrc); //从char*转换到bstr
     void  CpyBSTRToChar(char *pTmp,BSTR newVal) //从bstr转换到char*防止内存泄漏
    {
    char * pVal  = _com_util::ConvertBSTRToString(newVal);
    if(pVal !=NULL && strlen(pVal)<MAX_PATH)
    {
    strcpy(pTmp,pVal);
    delete pVal;
    pVal = NULL;
    }
    }
      

  4.   

        这个是我写过的代码,情况和楼主差不多。
    HOOKSLIB_API char* GetRecordInfo()
    {
        return ResultBuffer; //char ResultBuffer[10000] 
    }
            [DllImport("HooksLib.dll")]
            public static extern IntPtr GetRecordInfo();
    protected override void WndProc(ref Message m)
            {
                if (m.Msg == WM_MYSCRIPTREADY)
                {
                    IntPtr intp = GetRecordInfo();
                    string strTmp = Marshal.PtrToStringAnsi(intp);
                    InsertScript(strTmp);
                    //Debug.Write(strTmp);
                    //Marshal.FreeHGlobal(intp);
                }
                           base.WndProc(ref m);
            }
    希望能够帮到楼主