2016-12-23 9 views
0

私はこれまでに似たようなことを知っていますが、私はそれを働かせることはできません。 私はdllでC#関数を持っています。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

だから何が起こりますか? C#で 'null'を取得しますか?または空の文字列ですか?あなたが入力に関係なく42を返すとどうなりますか?それはC++に戻りますか?あなたのCOMインターフェイスはどのように見えますか? C#とC++の両方で? – nvoigt

答えて

0

COMでは、文字列はBSTRとしてマーシャリングされます。これは、NULLで終了するC++文字列とは異なります。 C++でBSTRを作るための最も簡単な方法は、ATLのCComBSTRクラスである:

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

ありがとう、もう1つは私のために働いた! – Johannes

関連する問題