2014-12-17 4 views
0

이 점은 작동하지 않습니다. 그것을 고치는 법. 그 함수를 호출 한 후 CStrings 스택을 떠난다 이해합니다. 문자열의 모든 유형입니다. C++ std : 문자열 등입니다. Thats는 C# 문자열로 동작합니다. 어떻게 작동시킬 수 있습니까?LPWSTR & foo를 함수로 되 돌리십시오.

void Dialog1::GetOrderingKey(LPWSTR& lpOrderingKey) 
{ 
    CString OrderingKey; 
    m_Result.GetWindowText(OrderingKey); 
    lpOrderingKey = OrderingKey.GetBuffer(0); 
} 

    LPWSTR lpOrderingKey; 
    GetOrderingKey(lpOrderingKey); 

    int returnValue = lpfnDllOrderingCodeDataW(lpSerialNumber, lpOrderingKey, data, _countof(data)); 

답변

-3

간단하고 간단한 방법은 정적으로 선언하는 것입니다.

void Dialog1::GetOrderingKey(LPWSTR& lpOrderingKey) 
{ 
    static CString OrderingKey; 
+1

당신이'GetOrderingKey()'를 다시 호출 할 경우 어떻게됩니까? 이것은 위험한 해결책입니다. – AAT

+1

당신은 내가하는 일을 알지 못한다고 추정하지 마십시오! 정적 변수에 대한 참조를 반환하는 것은 좋지 않은 해결책이며 정확한 해결책은 어렵지 않습니다. – AAT

+0

@AAT "이것은 매우 위험한 해결책입니다."사건을 인용 해 주시겠습니까 ... 나에게도 좋을 것입니다. – ravi

3

그냥 GetOrderingKey()에서 CString을을 반환 :

CString Dialog1::GetOrderingKey() 
{ 
    CString OrderingKey; 
    m_Result.GetWindowText(OrderingKey); 
    return OrderingKey; 
} 

CString ordering_key = GetOrderingKey(); 

int returnValue = lpfnDllOrderingCodeDataW(lpSerialNumber, (LPCWSTR) ordering_key, data, _countof(data)); 
+1

이것이 올바른 해결책입니다. 'CString'은 마치 일류 객체처럼 사용되도록 고안되었으며, MS는 (대부분) 당신을 위해 열심히했습니다. 대부분의 경우 함수를 효율적으로 전달하고 함수에서 반환 할 수 있습니다. http://msdn.microsoft.com/en-us/library/acttytz3.aspx – AAT

관련 문제