fisadmaster Ответов: 2

Как отправить консольные параметры C++ в библиотеку DLL C#


Мне нужно отправить два числа, введенные в качестве параметров или запрошенные консолью C++, в библиотеку на языке C#.

Вручную код есть:
BSTR thing_to_send = ::SysAllocString(L"10 20");


Как я могу создать переменную типа BSTR, используя значения параметров, указанных консолью, или две переменные типа integer или string.

Мне нужно объединить значения, используя пробел между ними, например:

строка Num1 = 30;
строка Num2 = 40;
строка dataToSend = Num1 + "" + Num2;

или

строка Num1 = argv[1];
строка Num2 = argv[2];
строка dataToSend
dataToSend += Num1 + " ";
dataToSend += Num2;

Как я могу преобразовать dataToSend в допустимую переменную BSTR для отправки с помощью:
отправить данные в BSTR?

Что я уже пробовал:

На каждой странице, которую я рассмотрел, указаны другие типы значений происхождения для преобразования, с явными значениями цепочки, такими как "Cade to convert", но не с использованием переменных, как это происходит в данном случае

2 Ответов

Рейтинг:
9

fisadmaster

Я получаю решение с другого форума от пользователя @devdimi

BSTR CombineStrings(_TCHAR* arg1, _TCHAR* arg2) {
long len1 = wcsnlen_s(arg1, 100);
long len2 = wcsnlen_s(arg2, 100);

Результат BSTR = SysAllocStringLen(NULL, len1 + len2 + 1);
memcpy(result, arg1, len1 * sizeof(OLECHAR));
memcpy(result + len1, L" ", 1 * sizeof(OLECHAR));
memcpy(result + len1 + 1, arg2, len2 * sizeof(OLECHAR));

результат[len1 + len2 + 1] = NULL; // содержит "firstarg<empty>secondarg"
возвращаемый результат;
}

инт имя _tmain(АГДС, функций _tchar* argv в[])
{
if (argc < 3) {
// требуются два аргумента.
возврат -1;
}

BSTR combinedStr = CombineStrings(argv[1], argv[2]);
Тип BSTR returned_thing;
Значение HRESULT значение HRESULT = obj-файлы-&ГТ;GetTheThing(combinedStr, &ампер;returned_thing);

SysFreeString(combinedStr);
возвращает 0;
}


Рейтинг:
2

KarstenK

Если вам это нужно прямо в C++, чем _bstr_t должен идти. В противном случае я предпочитаю выделить некоторый буфер, а не копировать строку, как показано в этом примере моя статья.


fisadmaster

Я действительно знаю, что мне нужно, то, что я спросил, - Это как этого достичь? В статье не показано преобразование, которое удовлетворяет поставленному здесь вопросу.

KarstenK

_bstr_t bstr1(_T("это тестовая строка.")); не работает для использования bstr1 для c#?