В настоящее время я кодирую MFC DLL только с экспортируемой функцией (без класса), и обычно я использую формат
extern "C" void EXPORT_DLL function_name(parameters)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// do something here
}
Но теперь мне нужно экспортировать массив данных. Список имен пользователей и идентификаторов (из MongoDB).
Можно ли экспортировать функцию, которая возвращает такой вектор пары, или она сломается, потому что это не экспортируемый тип?
extern "C" vector<pair<std::string, std::string>> EXPORT_DLL function_name(parameters)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// do something here
return a_vector_of_pair;
}
Если это невозможно, каковы другие варианты?
Спасибо.
1 ответ
Вы можете поставить функции без extern "C"
.
Это означает, что вы можете использовать эту функцию только из c ++, но не из c. (вы можете использовать другие функции extern "C"
из DLL из c)
В любом случае нет использования вектора в c ...
Поместите следующий код в заголовок вашей dll:
//header
typedef std::pair<std::string,std::string> pair_strs;
typedef std::vector<pair_strs> vec_pair_strs;
vec_pair_strs DLL_EXPORT SomeFunction();
Поместите следующий код в свой источник dll:
//cpp:
vec_pair_strs DLL_EXPORT SomeFunction()
{
vec_pair_strs v;
//...
return v;
}
Похожие вопросы
Связанные вопросы
Новые вопросы
c++
C++ — это язык программирования общего назначения. Изначально он разрабатывался как расширение C и имел аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде, который будет скомпилирован с помощью компилятора C++. Используйте тег версии для вопросов, связанных с конкретной стандартной версией [C++11], [C++14], [C++17], [C++20] или [C++23]. и т.д.
extern "C"
? вектор означает c ++. вы должны попробовать сделать это на c ++.extern "C" void EXPORT_DLL function_name(vector<pair<std::string, std::string>>* param)