Как работать (портативно) с иерархиями класса C++ и динамически подключаемыми библиотеками

Рассмотрите:

sizer.ResizeImage(inputImage, outputImage, 0.5, ImageFormat.Jpeg);

, Что, если Вы использовали менее ясные имена переменной:

sizer.ResizeImage(i, o, x, ImageFormat.Jpeg);

Предполагают, что Вы распечатали этот код. Более трудно вывести, каковы эти аргументы, поскольку у Вас нет доступа к сигнатуре метода.

С быстрым интерфейсом, это более ясно:

 sizer.FromImage(i)
 .ToLocation(o)
 .ReduceByPercent(x)
 .OutputImageFormat(ImageFormat.Jpeg)
 .Save();

кроме того, порядок методов не важен. Это эквивалентно:

 sizer.FromImage(i)
 .ReduceByPercent(x)
 .OutputImageFormat(ImageFormat.Jpeg)
 .ToLocation(o)
 .Save();

, Кроме того, возможно, у Вас могли бы быть значения по умолчанию для выходного формата изображения и сокращение, таким образом, это могло стать:

 sizer.FromImage(i)
 .ToLocation(o)
 .Save();

Это потребовало бы, чтобы перегруженные конструкторы достигли того же эффекта.

5
задан Virgil 14 October 2009 в 07:37
поделиться

2 ответа

Я действительно нашел ответ на мой вопрос из-за того, что мне нужно было его полностью сформулировать, и я сделал лучший поиск в Google :) Кажется,

__attribute__((dllimport)) // import
__attribute__((dllexport)) // export

Попробую это, я подумал, что оставлю вопрос здесь, на случай, если кто-то еще наткнется на эту проблему (и в качестве предупреждения для людей, тот же заголовочный файл, включенный в "основной двоичный файл" и DLL обычно приводит к другой фактической реализации, в зависимости от параметров компилятора - если вы не поместите в класс правильные атрибуты dllimport / export).

3
ответ дан 15 December 2019 в 01:05
поделиться

Это будет работать, только если включен RTTI. Вы, вероятно, получите это автоматически в MSVC ++, но gcc требует определенных переключателей ссылок. Подробности см. В FAQ по GCC .

1
ответ дан 15 December 2019 в 01:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: