情况是这样的:
想在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
想在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
{
CString mystr = (char*)inputstr;
SysFreeString(inputstr);
CString mystrnew;//...对mystr进行一系列操作
//...得到mystrnew(*outputstr) = mystrnew.AllocSysString();
}但是在C#里面该怎么传入字符串,又该怎么将传出的字符串该取出呢
http://msdn.microsoft.com/zh-cn/library/fzhhdwae%28v=VS.90%29.aspx
#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;
}
}
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);
}
希望能够帮到楼主