Не #include "stdafx.h"
в публичном заголовочном файле вашей библиотеки. Под открытым заголовочным файлом я подразумеваю заголовочный файл, который клиенты вашей библиотеки будут #include
.
Вместо этого определите только абсолютный минимум и предпочтительно используйте в этом файле 100% переносимый код. Также избегайте использования STL, если ваша библиотека будет использоваться разными компиляторами или платформами.
Итак, предположим, у вас есть открытый заголовочный файл my_library.h
, который реализован в gizmo.cpp
. У вас будет следующее:
gizmo.cpp
#include "stdafx.h"
#include "my_library.h"
int GizmoTronic()
{
// ...
return 42;
}
Кроме того, не по теме, но используйте защиту от макросов, а не #pragma once
, которая не является частью языка C ++ и поэтому поддерживается не всеми компиляторами. Это плохая привычка.
EDIT:
Что касается вопроса о том, что DWORD
и string
не определены, когда ваш заголовок #include
-ed, у меня есть 3 предложения:
1) Используйте только переносимые типы данных. То есть типы данных, определенные стандартом. DWORD
- изобретение от Microsoft (десятилетия назад). Это не часть языка, и это не переносимо. Вместо этого используйте unsigned long
или что-то еще подходящее.
2) Не используйте string
в открытом интерфейсе вашей библиотеки, если ваша библиотека будет использоваться кодом, скомпилированным с компилятором, отличным от вашего. Причина в том, что string
полностью определен в заголовочных файлах, поэтому каждый компилятор потенциально имеет свою собственную реализацию. string
одного компилятора может отличаться от другого.
3) Предполагая, что # 2 не применяется, не стесняйтесь #include
любых необходимых заголовков из стандартной библиотеки в верхней части заголовка. Если вы используете string
в общедоступном интерфейсе, #include <string>
в заголовке. (Только, пожалуйста, не using namespace std
). Ваш заголовок должен быть автономным.
EDIT2:
Вот как я бы объявил вашу функцию:
void MyFunc(unsigned long a, const char* b);