2016-12-23 2 views
0

Я знаю, что подобные вещи были заданы раньше, но я просто не могу заставить его работать. У меня есть функция C# в dll.Вызов метода C# с строкой из C++

public int setUser(string str){ 

Я вызываю это из C++. Я пробовал что-то вроде этого.

long lResult = 0; 
    PWSTR pw = L"hello"; 
    pICalc->setUser(pw, &lResult); 

Но, похоже, это просто отправляет пустую строку или нулевое значение.

Что является самым простым способом вызова метода и отправки в String, который получит метод?

+2

Как вы даже вызвать метод? Вы используете C++/CLI? Или COM? – nvoigt

+0

Привет Я использую COM – Johannes

+1

Так что же происходит? Вы получаете 'null' в C#? Или пустая строка? Что произойдет, если вы вернете 42 независимо от ввода, делает ли это возвращение обратно на C++? Как выглядит ваш COM-интерфейс? Как в C#, так и в C++? – nvoigt

ответ

0

С COM строки строятся как BSTR, который отличается от строки C++ с нулевым завершением. Самый простой способ сделать BSTR в C++ это с классом CComBSTR ATL в:

pICalc->setUser(CComBSTR(L"hello"), &lResult); 

В противном случае вы можете использовать SysAllocString/SysFreeString функции:

BSTR bstrString = ::SysAllocString(L"hello"); 
if (bstrString == NULL) 
    // out of memory 

pICalc->setUser(bstrString, &lResult); 
::SysFreeString(bstrString); 
+0

Спасибо, второй работал для меня! – Johannes

Смежные вопросы