Здравствуйте!
Каким образом мне модифицировать строку BSTR например прилепить к ней другую BSTR строку
и прилепить к BSTR char строку.
Приведите пожайлуста полный рабочий пример желательно чиобы работал в VC++ 5.0
Почему полный, — потому-что я VB специалист и пишу API DLL для VB и не спец в C++.
Спасибо за внимание!
15.04.04 15:41: Перенесено модератором из 'C/C++' — WH
используй класс _bstr_t или CComBSTR...
#include "comutil.h"
int main(int argc, char* argv[])
_bstr_t str1="str1";
_bstr_t str2="str2";
str2=str1+str2;
return 0;
}
Здравствуйте, folder-pro, Вы писали:
FP>Каким образом мне модифицировать строку BSTR например прилепить к ней другую BSTR строку и прилепить к BSTR char строку.
FP>Приведите пожайлуста полный рабочий пример желательно чиобы работал в VC++ 5.0
FP>Почему полный, — потому-что я VB специалист и пишу API DLL для VB и не спец в C++.
У тебя не будет BSTR никоим образом. Глянь сюда
Chapter 6: Strings.
Есть два пути — передавать ByVal str As String или ByRef str As String.
В первом случае память под строку выделяет VB и передает в DLL, там делаешь strcpy первой строки и strcat второй.
Во втором случае можешь дополнительно перевыделить память через SysAllocStringByteLen, передав туда строку из первого случая.
Примерно таким образом.
Private Declare Function GetStringByVal Lib "moddll" Alias "_GetStringByVal@4" (ByVal s As String) As Long
Private Declare Function GetStringByRef Lib "moddll" Alias "_GetStringByRef@4" (ByRef s As String) As Long
__declspec(dllexport) void __stdcall GetStringByVal(/*[in,out]*/ LPSTR pString)
{
LPSTR newString = "new string";
long len = SysStringByteLen( (BSTR) pString );
if( len )
strncpy( pString, newString, len );
return;
}
__declspec(dllexport) void __stdcall GetStringByRef(/*[in,out]*/ LPSTR * ppString)
{
LPSTR newString = "new string";
long len = SysStringByteLen( (BSTR) *ppString );
SysFreeString( (BSTR) *ppString ); // in any case because of in-out nature
*ppString = (LPSTR) SysAllocStringByteLen( newString, strlen(newString) );
return;
}