Здравствуйте, karp2005, Вы писали:
K>Есть такой код на C++ (DLL):
K>extern "C" __declspec(dllexport) void EnumInterface(LPCTSTR p_outString) //указатель на строку
K>{
K>.....объявление переменных........
K>RPC_WSTR strGuid = NULL;
K>__try
K>{
K>..............некоторые действия.................................
K>if (UuidToStringW(&pIntfList->InterfaceInfo.InterfaceGuid, &strGuid) == RPC_S_OK)
K>{
K>wcscpy((LPWSTR)p_outString,(LPWSTR)strGuid);
K>RpcStringFreeW(&strGuid);
K>}
K>}
K>__finally
K>{
K>....очищаем память....
K>}
K>}
K>Вопрос:
K>1. правильно ли я возвращаю строку копируя её в область памяти, выделеной вызывающим процессом? (в случае с С — нечто типа wchar_t *test; test = new wchar_t[64]
Правильно, но если учесть, что LPCTSTR — это не совсем LPWSTR, то неправильно.
K>2. Как правильно эту ДЛЛ вызвать из VB6 (чтобы вернуть в вызывающую программу строку wstring)?
Никак, потому что VB умеет вызывать только stdcall функции.