描述:
由于工作需要刚接触COM,做了一个方法。
需要这个方法中有一个参数要像TCHAR*那样,可是作出来这样的方法候编译提示错误,好像是IDL不认这种参数类型,只认BSTR还有C++中的很多变量类型在IDL里都不认。只好使用BSTR然后在方法内部再将BSTR转换成TCHAR*,可是现在这个方法要求的是执行速度优先,所以对于大文本,每一次字符集转换都相当耗时,还希望各位仁兄帮忙解决这个问题。
我需要尽量减少字符集的转换,因为我要处理的是普通字符集,而BSTR中的都是宽字符。不能转换,每一次转换都严重威胁整个组件的执行速度。
能不能像在C++里的函数参数一样使用char* 或 TCHAR* 啊。
最好有个例子代码
解决方案1:
使用 BYTE* 吧
idl中:
......
[id(1), helpstring("method ReceiveBigString")] HRESULT ReceiveBigString(BYTE *pbyStringData, long lDataSize);
......
假设组件类名为ImplBigStringReceiver
调用端(以VB为例)
Dim strTest As String
strTest = "Hello World"
Dim byTest() As Byte
byTest = strTest
dim oReceiver as new ImplBigStringReceiver
oReceiver.ReceiveBigString byTest(0), 10
被调用端接受到之后,用类似的代码来处理:
STDMETHODIMP CDigiClock::TransportBigString(BYTE *pbyStringData, long lDataSize)
{
// TODO: Add your implementation code here
unsigned char *pStr = pbyStringData;
LPCTSTR str = (LPCTSTR)pStr;
return S_OK;
}
具体应用中 要用lDataSize中的信息决定字符个数
那么楼主就应该象iidunknown(xiang ping) 所说的,将字符串看成是一块内存空间来进行传递。如:
.idl:
HRESULT ReceiveBigString( [in, sizeof( lDataSize )] BYTE *pbyStringData,
[in] long lDataSize );
.cpp:
客户
char a[] = "dsklfsdkl";
pPointer->ReceiveBigString( a, strlen( a ) + 1 );
服务
pbyStringData即可用做字符串处理
您可能想查找下面的文章:
- IXMLHTTPRequest->put_onreadystatechangeIDispatcharg1怎么使用,非常着急?
- 求:翻译此VBA代码为vc"ActiveChartChartAreaCopy"
- tchar到bstr要怎么转?
- TChart控件Interfacenotsupoorted
- ActiveX控件“MicrosoftChartControl60sp4OLEDB"不能例示
- vs2005与VC60问题“'TCHAR[255]'to'PCHAR'”?
- _bestr_t如何转换TCHAR?
- BSTR字符串到TCHAR类型的转换
- LPWSTR,LPSTR,LPTSTRconstchar谁能告诉我这些东西之间的关系?在线等待
- COM里一个方法中的参数不认TCHAR类型如何解决