Size: a a a

2020 July 15

DB

Dimmu Borgir in supapro.cxx
Александр Водянников
       Country* temp = new Country[count + 1];
       for (int i = 0; i < count; i++)
       {
           temp[i] = countries[i];
       }
       delete[] countries;
       countries = temp;

что за логика ...
понимаю не эффективно получается лучше с капасити заюзать
источник

DB

Dimmu Borgir in supapro.cxx
Задание 2: Видеоплеер
- enum ScreenType(ADD, DELETE, LIST, WATCH)
- class Screen (fields: title) (запретите создавать
 экземпляры этого класса)
- class Screen[ADD, DELETE, LIST, WATCH] (является наследником Screen
 и в методе show() печатает title)
- class ScreenManager (method: show(ScreenType))
- в ScreenWatch можно переходить только из ScreenList
*/ мне вообще не дошло как должен выглядеть структура кода. объясните пож
источник

D

Dmitry in supapro.cxx
Anatoly Shirokov
тебе надо получить экспортируемые символы, в С++ они специальным образом "манглируются" и чтобы их использовать в С потребуется знать их манглированные имена
Нет, всё сложнее. У меня есть хидер с классом и дллка (собраны под MSVC). Мне надо сделать враппер в виде дллки на языке С, чтобы можно было использовать новую дллку в другом проекте
источник

AS

Anatoly Shirokov in supapro.cxx
Dmitry
Нет, всё сложнее. У меня есть хидер с классом и дллка (собраны под MSVC). Мне надо сделать враппер в виде дллки на языке С, чтобы можно было использовать новую дллку в другом проекте
а, тогда все проще
источник

AF

Aidar Fattakhov in supapro.cxx
Dmitry
dllexport
Писать сищный интефрейс
источник

AS

Anatoly Shirokov in supapro.cxx
пиши на С++, выставляй наружу С интерфейс через
export "C" {
  void my_c_api_func1();
  void my_c_api_func2();
}
источник

AS

Anatoly Shirokov in supapro.cxx
сделать это можно в одной dll, предусмотрев и С и С++ итерфейс
источник

DB

Dimmu Borgir in supapro.cxx
препод сказал что саму видеоплеер не надо реализовывать просто его интересует общая структура
источник

D

Dmitry in supapro.cxx
Anatoly Shirokov
пиши на С++, выставляй наружу С интерфейс через
export "C" {
  void my_c_api_func1();
  void my_c_api_func2();
}
вот, например, внутри my_c_api_func1()  я создаю объект и вызываю его метод. А как мне в my_c_api_func2 вызвать другой объект того же метода?
источник

AS

Anatoly Shirokov in supapro.cxx
Dmitry
вот, например, внутри my_c_api_func1()  я создаю объект и вызываю его метод. А как мне в my_c_api_func2 вызвать другой объект того же метода?
если у тебя эти методы вызываются в контексте какого-то объекта, то тебе надо предусмотреть для клиента методы создания и удаления такого объекта
источник

AS

Anatoly Shirokov in supapro.cxx
export "C" {
  void* my_api_create_object();
  void my_api_call_func1(void* thiz);
  void my_api_call_func2(void* thiz);
  void my_api_destroy_object(void*);
}
источник

AS

Anatoly Shirokov in supapro.cxx
ну и еще одна деталь. ты не имеешь права выпускать исключения за границу api
источник

AS

Anatoly Shirokov in supapro.cxx
то есть все твои реализации должны быть покрыты try {} catch(...) {}
источник

D

Dmitry in supapro.cxx
Anatoly Shirokov
то есть все твои реализации должны быть покрыты try {} catch(...) {}
Это в ДЛЛке ?
источник

AS

Anatoly Shirokov in supapro.cxx
Dmitry
Это в ДЛЛке ?
в реализации api функции
источник

AS

Anatoly Shirokov in supapro.cxx
void my_api_call_func1(void* thiz) {
  try {
     ...
  } catch(...) {
  }
}
источник

AS

Anatoly Shirokov in supapro.cxx
еще тебе надо будет предусмотреть коды возврата из своих функций для сообщения об ошибках и т.п.
источник

AS

Anatoly Shirokov in supapro.cxx
в итоге, может тебе проще написать COM объект, на С его можно использовать без проблем.
источник

D

Dmitry in supapro.cxx
Anatoly Shirokov
void my_api_call_func1(void* thiz) {
  try {
     ...
  } catch(...) {
  }
}
Получается, что thiz будет создаваться на стороне, вызывающей дллку, так?
источник

AS

Anatoly Shirokov in supapro.cxx
Dmitry
Получается, что thiz будет создаваться на стороне, вызывающей дллку, так?
void* my_api_create_object() {
  try {
     return new my_object();
  } catch(...) {
      return nullptr;
  }
}
источник