2014-07-01 5 views
0

하나의 입력과 2 개의 출력 매개 변수를 가진 C# DLL의 메서드가 있습니다. 세 가지 모두 String입니다.C#에서 문자열 매개 변수 값을 C++로 가져옴 BSTR *?

저는 firebreath C++에서이 함수를 호출하려고합니다. C++에서 BSTR * 값을 전달해야하는 방법은 무엇입니까? 어떻게 C#에서 그 가치를 얻을 수 있습니까?

는 이미

BSTR* userKey =NULL; 
*userKey = ::SysAllocString(L"Hello Managed World"); 

하지만 그 작동하지를 사용하여 얻을 노력했다.

C 번호 기능 :

public void GetPublicKeyforEncryption(String ToUserEmailAddress, out String userKey , out String mySharedKey) 

C++ 호출 기능 : 내가 메모리를 할당하고 합격을 어떻게 ++ GetPublicKeyforEncryption bsData 값이 제대로 전달되는 위의 C에서

std::wstring& ToUserEmailaddress; 
BYTE **bEncryptData = NULL; 
BSTR bsData = SysAllocStringLen(ToUserEmailaddress.data(), ToUserEmailaddress.size()); 
BSTR* userKey =NULL; 
BSTR* mySharedKey =NULL; 
CSharpInterface->GetPublicKeyforEncryption(bsData,userKey ,mySharedKey); 

,

userKey ,mySharedKey in the BSTR* type 

누구든지이 문제를 해결할 수 있습니까? 도와주세요. 올바른 코드 아니라

감사 SANJU

답변

2

는 BSTR은 이미 포인터 유형입니다. 호출 된 메서드에서 할당 할 수 있도록 BSTR 변수에 대한 포인터를 전달해야합니다. 한스 Passant.i 이미 this.it주는 시도 답장을 보내

BSTR retval = NULL; 
HRESULT hr = CSharpInterface->SomeMethod(&retval); 
if (SUCCEEDED(hr)) { 
    // Use retval 
    //... 
    SysFreeString(retval); 
} 
+0

감사합니다, 오류 C2664 : 한 out string 인수를 가정 일반 코드 '표준 : : basic_string <_Elem, _Traits, _Ax> :: basic_string (CONST std :: basic_string <_Elem, _Traits, _Ax> & ' –

+1

내 코드 조각 std :: std :: basic_string <_Elem, _Traits, _Ax> &' 문자열 그래서 컴파일 오류를 생성 할 수 없습니다. BSTR에서 std :: wstring으로 변환하려면 wchar_t *로 캐스팅해야 컴파일러에게 데이터 손실이 발생할 수 있음을 알 수 있음을 알립니다. –

+0

K.i가 확인합니다 ... –

관련 문제