Ошибка в CreateProcessW: невозможно преобразовать параметр 9 из «STARTUPINFO» в «LPSTARTUPINFO &» - PullRequest
0 голосов
/ 27 сентября 2011

Я понимаю, что startup_info - это указатель на STARTUPINFO структуру

У меня есть функция, которую я передаю по ссылке startup_info. Таким образом, мы можем сказать, что я передаю указатель по ссылке

void cp(....., LPSTARTUPINFO & startup_info) {
  CreateProcessW(....., startup_info);
}

Давайте предположим, что я вызываю функцию cp в этой функции caller ()

void caller() {
  STARTUPINFO startup_info; 
  cp(....., startup_info); // error occurs here, I cannot convert 'STARTUPINFO' to 'LPSTARTUPINFO &'
}

Появится сообщение об ошибке: Ошибка в CreateProcessW: невозможно преобразовать параметр 9 из STARTUPINFO в LPSTARTUPINFO & 1011 *.

Но так как statup_info - указатель, я должен быть в состоянии передать это в функцию cp, верно?

EDIT: Спасибо за ваши советы, но у меня работает следующее: LPSTARTUPINFO - указатель на STARTUPINFO структуру

Поэтому я перехожу на

void cp(....., LPSTARTUPINFO startup_info_ptr) {
      CreateProcessW(....., startup_info_ptr); // pass in pointer of startup_info
}

void caller() {
      STARTUPINFO startup_info; 
      cp(....., &startup_info); // passing the address of startup_info
}

1 Ответ

2 голосов
/ 27 сентября 2011

У вас есть два startup_infocaller() это STARTUPINFO (не указатель).В cp() это STARTUPINFO*& (ссылка на указатель).Зачем?Скорее всего, это непреднамеренно.

Я бы ожидал:

void cp(....., STARTUPINFO* pStartup_info) {
  CreateProcessW(....., pStartup_info);
}
void caller() {
  STARTUPINFO startup_info; 
  cp(....., &startup_info);
}

В производственном коде я избегаю p префиксов для указателей, но я использовал его здесь для устранения неоднозначности двух startup_info, которые выне было.

...