2011-12-30 7 views
0

文字列をC#からCOM C++に渡す方法は?私はintのためにして、それは正常に動作しています。文字列の値をC#からC++に戻す

int型の戻り値の型のための私のCOM C++コード:

void ServiceAdapter::GetErrorCode1234() 
{ 
long x; 
m_server->GetErrorCodeOnLoginFailure(&x); 
//So I get my return code value in x; 
} 

int型の戻り値の型のための私のC#コード: だから、C#のIAMから、次のように呼び出す:

int GetErrorCodeOnLoginFailure() 
{ 
return 3 //some return code 
} 

しかし、私は同じことをしている場合Stringを返すために、コードは実行時にクラッシュしています。

ストリングの戻り型のための私のCOM C++コード:

BSTR ServiceAdapter::GetVersion1234() 
{ 
BSTR x = :SysAllocString(CCTIUtils:stringToBSTR(L"")); 
m_server->GetAdapterVersion(&x); // The code is crashing here. 
return x; 
} 

ストリングの戻り型のための私のC#コード:

ストリングGetAdapterVersion(){戻り "6.4.23"。 }

問題点は何ですか?

+0

GetAdapterVersionを呼び出すと、参照パラメータとして取得するのではなく、文字列が返されます。電話が正しいと確信していますか? –

+0

うん。それがどのように機能するのですか? intのためのその正常な作業 – Sunil

+0

std :: wstring ServiceAdapter :: GetVersion1234()、 なぜstd :: wstringですか?それはBSTRでなければなりませんね。 –

答えて

0

この例はあなたに適していますか?そうでない場合はスニル...そして、私はこの問題について協議する方法がわからない

あなたはC#のコードが更新された文字列を取得して参照することにより、文字列を渡す必要があります。いっその

int GetString(String^% ValueData) 

かを:

String^ GetString() 
{ 
    char buffer[666]; // Hmya, what to pick? 
    unmanagedGetString(buffer); 
    return System::Runtime::InteropServices::Marshal::PtrToStringAnsi((IntPtr)buffer); 
} 
関連する問題