Win32 DLL Функция экспорта Параметр Best Practice

Я пишу DLL, которая будет экспортировать функции и классы. Но сейчас у меня есть вопрос об экспорте функций.

Если моя подпись функции выглядит так:

__declspec(dllexport) int fn1(FILE *theFile);

Должен ли я включить, чтобы он определял ФАЙЛ? Какова лучшая практика здесь?
И если я хочу экспортировать функцию, которая принимает или возвращает пользовательский тип, должен ли файл заголовка для этих типов быть включен в экспортируемый файл заголовка?

1

Решение

Не пересылайте стандартные типы и функции библиотеки. Для этого предусмотрены заголовки библиотеки. Ваш файл должен быть выложен как:

#ifndef MYLIBRARY_H
#define MYLIBRARY_H

#ifdef  MYLIBRARY_EXPORTS
#define MYLIBRARY_EXPORT    __declspec(dllexport)
#else
#define MYLIBRARY_EXPORT    __declspec(dllimport)
#endif

// required headers
#include <stdio.h>

// exported/imported functions
MYLIBRARY_EXPORT int fn1(FILE *theFile);

#endif

Ваш проект DLL построен с MYLIBRARY_EXPORTS определяется как часть или определенный макрос препроцессора (настраивается любым количеством способов), и потребители вашей DLL делают не определить это.

Это общая схема, которую MS использует для своих генераторов консервированных проектов DLL. Рассмотрите возможность сделать то же самое в своих проектах. Прежде всего, включите требуемые стандартные заголовки для вашей библиотеки, чтобы правильно определить, что ей нужно, и что она дает.

5

Другие решения

Заголовочный файл обычно должен быть автономным. Клиенты, использующие ваш заголовочный файл, не должны знать, что им нужно #include "xyz.h" перед включением собственного заголовка. (А представь если что другое xyz.h Заголовок сделал то же самое, и так далее. Вам нужно знать строгий порядок для всех заголовочных файлов, что было бы кошмаром.)

Однако вам не обязательно #include Заголовки для некоторых типов, которые вы используете. Например, вы можете вместо этого использовать предварительные объявления.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector