Модификация строки BSTR
От: folder-pro  
Дата: 15.04.04 00:29
Оценка:
Здравствуйте!

Каким образом мне модифицировать строку BSTR например прилепить к ней другую BSTR строку
и прилепить к BSTR char строку.
Приведите пожайлуста полный рабочий пример желательно чиобы работал в VC++ 5.0
Почему полный, — потому-что я VB специалист и пишу API DLL для VB и не спец в C++.
Спасибо за внимание!

15.04.04 15:41: Перенесено модератором из 'C/C++' — WH
Re: Модификация строки BSTR
От: Jakop Россия https://wmspanel.com
Дата: 15.04.04 05:10
Оценка:
используй класс _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;
}
https://wmspanel.com/nimble — Nimble Streamer media server for live and VOD HLS, RTMP, HTTP streaming

https://wmspanel.com/ — Control and reporting panel for Wowza and Nimble Streamer
Re: Модификация строки BSTR
От: Vi2 Удмуртия http://www.adem.ru
Дата: 15.04.04 05:40
Оценка:
Здравствуйте, 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;
    }
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.